aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/ru/books/developers-handbook
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/content/ru/books/developers-handbook')
-rw-r--r--documentation/content/ru/books/developers-handbook/_index.adoc6
-rw-r--r--documentation/content/ru/books/developers-handbook/_index.po24
-rw-r--r--documentation/content/ru/books/developers-handbook/bibliography/_index.adoc4
-rw-r--r--documentation/content/ru/books/developers-handbook/bibliography/_index.po22
-rw-r--r--documentation/content/ru/books/developers-handbook/book.adoc4
-rw-r--r--documentation/content/ru/books/developers-handbook/book.po34
-rw-r--r--documentation/content/ru/books/developers-handbook/introduction/_index.adoc2
-rw-r--r--documentation/content/ru/books/developers-handbook/introduction/_index.po10
-rw-r--r--documentation/content/ru/books/developers-handbook/introduction/chapter.adoc140
-rw-r--r--documentation/content/ru/books/developers-handbook/ipv6/_index.adoc6
-rw-r--r--documentation/content/ru/books/developers-handbook/ipv6/_index.po180
-rw-r--r--documentation/content/ru/books/developers-handbook/kernelbuild/_index.adoc4
-rw-r--r--documentation/content/ru/books/developers-handbook/kernelbuild/_index.po10
-rw-r--r--documentation/content/ru/books/developers-handbook/kerneldebug/_index.adoc2
-rw-r--r--documentation/content/ru/books/developers-handbook/kerneldebug/_index.po119
-rw-r--r--documentation/content/ru/books/developers-handbook/kerneldebug/chapter.adoc678
-rw-r--r--documentation/content/ru/books/developers-handbook/l10n/_index.adoc4
-rw-r--r--documentation/content/ru/books/developers-handbook/l10n/_index.po22
-rw-r--r--documentation/content/ru/books/developers-handbook/parti.adoc2
-rw-r--r--documentation/content/ru/books/developers-handbook/parti.po4
-rw-r--r--documentation/content/ru/books/developers-handbook/partii.adoc2
-rw-r--r--documentation/content/ru/books/developers-handbook/partii.po4
-rw-r--r--documentation/content/ru/books/developers-handbook/partiii.adoc2
-rw-r--r--documentation/content/ru/books/developers-handbook/partiii.po4
-rw-r--r--documentation/content/ru/books/developers-handbook/partiv.adoc2
-rw-r--r--documentation/content/ru/books/developers-handbook/partiv.po4
-rw-r--r--documentation/content/ru/books/developers-handbook/partv.adoc2
-rw-r--r--documentation/content/ru/books/developers-handbook/partv.po4
-rw-r--r--documentation/content/ru/books/developers-handbook/policies/_index.adoc2
-rw-r--r--documentation/content/ru/books/developers-handbook/policies/_index.po64
-rw-r--r--documentation/content/ru/books/developers-handbook/policies/chapter.adoc196
-rw-r--r--documentation/content/ru/books/developers-handbook/secure/_index.adoc4
-rw-r--r--documentation/content/ru/books/developers-handbook/secure/_index.po102
-rw-r--r--documentation/content/ru/books/developers-handbook/secure/chapter.adoc190
-rw-r--r--documentation/content/ru/books/developers-handbook/sockets/_index.adoc2
-rw-r--r--documentation/content/ru/books/developers-handbook/sockets/_index.po90
-rw-r--r--documentation/content/ru/books/developers-handbook/testing/_index.adoc4
-rw-r--r--documentation/content/ru/books/developers-handbook/testing/_index.po26
-rw-r--r--documentation/content/ru/books/developers-handbook/tools/_index.adoc4
-rw-r--r--documentation/content/ru/books/developers-handbook/tools/_index.po361
-rw-r--r--documentation/content/ru/books/developers-handbook/x86/_index.adoc6
-rw-r--r--documentation/content/ru/books/developers-handbook/x86/_index.po388
42 files changed, 785 insertions, 1955 deletions
diff --git a/documentation/content/ru/books/developers-handbook/_index.adoc b/documentation/content/ru/books/developers-handbook/_index.adoc
index 9e83164861..8816d02961 100644
--- a/documentation/content/ru/books/developers-handbook/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/_index.adoc
@@ -1,5 +1,5 @@
---
-add_single_page_link: true
+add_single_page_link: 'true'
authors:
-
author: 'The FreeBSD Documentation Project'
@@ -9,8 +9,8 @@ description: 'Для тех, кто хочет разрабатывать про
next: books/developers-handbook/parti
params:
path: /books/developers-handbook/
-showBookMenu: true
-tags: "[\"FreeBSD Developers' Handbook\"]"
+showBookMenu: 'true'
+tags: ["FreeBSD Developers' Handbook"]
title: 'Руководство разработчика FreeBSD'
trademarks: ["freebsd", "apple", "ibm", "ieee", "intel", "linux", "microsoft", "opengroup", "sun", "general"]
weight: 0
diff --git a/documentation/content/ru/books/developers-handbook/_index.po b/documentation/content/ru/books/developers-handbook/_index.po
index 17abcc726d..c59efa788b 100644
--- a/documentation/content/ru/books/developers-handbook/_index.po
+++ b/documentation/content/ru/books/developers-handbook/_index.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-05-01 19:56-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/"
@@ -18,11 +18,13 @@ msgstr ""
"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
+#. type: YAML Front Matter: description
#: documentation/content/en/books/developers-handbook/_index.adoc:1
#, no-wrap
msgid "For people who want to develop software for FreeBSD (and not just people who are developing FreeBSD itself)"
-msgstr "Для тех, кто хочет разрабатывать программное обеспечение для FreeBSD (а не только для тех, кто разрабатывает саму FreeBSD)"
+msgstr ""
+"Для тех, кто хочет разрабатывать программное обеспечение для FreeBSD (а не "
+"только для тех, кто разрабатывает саму FreeBSD)"
#. type: Title =
#: documentation/content/en/books/developers-handbook/_index.adoc:1
@@ -31,12 +33,12 @@ msgstr "Для тех, кто хочет разрабатывать програ
msgid "FreeBSD Developers' Handbook"
msgstr "Руководство разработчика FreeBSD"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/_index.adoc:51
msgid "Abstract"
msgstr "Аннотация"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/_index.adoc:56
msgid ""
"Welcome to the Developers' Handbook. This manual is a _work in progress_ "
@@ -49,7 +51,7 @@ msgstr ""
"отсутствуют, а существующие нуждаются в обновлении. Если вы хотите помочь с "
"этим проектом, отправьте письмо на {freebsd-doc}."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/_index.adoc:59
msgid ""
"The latest version of this document is always available from the "
@@ -58,13 +60,13 @@ msgid ""
"link:https://download.freebsd.org/doc/[FreeBSD download server] or one of "
"the numerous extref:{handbook}[mirror sites, mirrors]."
msgstr ""
-"Последняя версия этого документа всегда доступна по ссылке link:https://"
-"www.FreeBSD.org[веб-сервер FreeBSD]. Его также можно загрузить в различных "
+"Последняя версия этого документа всегда доступна по ссылке link:https://www."
+"FreeBSD.org[веб-сервер FreeBSD]. Его также можно загрузить в различных "
"форматах и с разными вариантами сжатия с link:https://download.freebsd.org/"
-"doc/[сервера загрузки FreeBSD] или одного из многочисленных extref:{handbook}"
-"[зеркальных сайтов, mirrors]."
+"doc/[сервера загрузки FreeBSD] или одного из многочисленных "
+"extref:{handbook}[зеркальных сайтов, mirrors]."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/_index.adoc:60
msgid "'''"
msgstr "'''"
diff --git a/documentation/content/ru/books/developers-handbook/bibliography/_index.adoc b/documentation/content/ru/books/developers-handbook/bibliography/_index.adoc
index d107cef3fa..388500c102 100644
--- a/documentation/content/ru/books/developers-handbook/bibliography/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/bibliography/_index.adoc
@@ -3,8 +3,8 @@ description: 'Библиография Руководства разработч
params:
path: /books/developers-handbook/bibliography/
prev: books/developers-handbook/partv
-showBookMenu: true
-tags: "[\"FreeBSD Developers' Handbook\", \"bibliography\"]"
+showBookMenu: 'true'
+tags: ["FreeBSD Developers' Handbook", "bibliography"]
title: Библиография
weight: 17
---
diff --git a/documentation/content/ru/books/developers-handbook/bibliography/_index.po b/documentation/content/ru/books/developers-handbook/bibliography/_index.po
index 82f48421ac..9caeb4f000 100644
--- a/documentation/content/ru/books/developers-handbook/bibliography/_index.po
+++ b/documentation/content/ru/books/developers-handbook/bibliography/_index.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
"PO-Revision-Date: 2025-06-21 19:10+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
@@ -18,7 +18,7 @@ msgstr ""
"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
+#. type: YAML Front Matter: description
#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:1
#, no-wrap
msgid "FreeBSD Developers Handbook Bibliography"
@@ -31,7 +31,7 @@ msgstr "Библиография Руководства разработчика
msgid "Bibliography"
msgstr "Библиография"
-#. type: appendix
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:52
msgid ""
"[[COD,1]] [1] Dave A Patterson and John L Hennessy. Copyright(R) 1998 Morgan "
@@ -42,7 +42,7 @@ msgstr ""
"Kaufmann Publishers, Inc. 1-55860-428-6. Morgan Kaufmann Publishers, Inc. "
"Computer Organization and Design. The Hardware / Software Interface. 1-2."
-#. type: appendix
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:54
msgid ""
"[[APUE, 2]] [2] W. Richard Stevens. Copyright(R) 1993 Addison Wesley "
@@ -53,18 +53,18 @@ msgstr ""
"Longman, Inc. 0-201-56317-7. Addison Wesley Longman, Inc. Advanced "
"Programming in the Unix Environment. 1-2."
-#. type: appendix
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:56
msgid ""
"[[DIFOS, 3]] [3] Marshall Kirk McKusick and George Neville-Neil. "
"Copyright(R) 2004 Addison-Wesley. 0-201-70245-2. Addison-Wesley. The Design "
"and Implementation of the FreeBSD Operating System. 1-2."
msgstr ""
-"[[DIFOS, 3]] [3] Marshall Kirk McKusick and George Neville-Neil. "
-"Copyright(R) 2004 Addison-Wesley. 0-201-70245-2. Addison-Wesley. The Design "
-"and Implementation of the FreeBSD Operating System. 1-2."
+"[[DIFOS, 3]] [3] Marshall Kirk McKusick and George Neville-Neil. Copyright(R)"
+" 2004 Addison-Wesley. 0-201-70245-2. Addison-Wesley. The Design and "
+"Implementation of the FreeBSD Operating System. 1-2."
-#. type: appendix
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:58
msgid ""
"[[Phrack, 4]] [4] Aleph One. Phrack 49; \"Smashing the Stack for Fun and "
@@ -73,7 +73,7 @@ msgstr ""
"[[Phrack, 4]] [4] Aleph One. Phrack 49; \"Smashing the Stack for Fun and "
"Profit\"."
-#. type: appendix
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:60
msgid ""
"[[StackGuard, 5]] [5] Chrispin Cowan, Calton Pu, and Dave Maier. StackGuard; "
@@ -82,7 +82,7 @@ msgstr ""
"[[StackGuard, 5]] [5] Chrispin Cowan, Calton Pu, and Dave Maier. StackGuard; "
"Automatic Adaptive Detection and Prevention of Buffer-Overflow Attacks."
-#. type: appendix
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/bibliography/_index.adoc:62
msgid ""
"[[OpenBSD, 6]] [6] Todd Miller and Theo de Raadt. strlcpy and strlcat -- "
diff --git a/documentation/content/ru/books/developers-handbook/book.adoc b/documentation/content/ru/books/developers-handbook/book.adoc
index 1ff909d433..c077b58ff6 100644
--- a/documentation/content/ru/books/developers-handbook/book.adoc
+++ b/documentation/content/ru/books/developers-handbook/book.adoc
@@ -1,11 +1,11 @@
---
-add_split_page_link: true
+add_split_page_link: 'true'
authors:
-
author: 'The FreeBSD Documentation Project'
copyright: '1995-2023 The FreeBSD Documentation Project'
description: 'Для тех, кто хочет разрабатывать программное обеспечение для FreeBSD (а не только для тех, кто разрабатывает саму FreeBSD)'
-tags: "[\"FreeBSD Developers' Handbook\"]"
+tags: ["FreeBSD Developers' Handbook"]
title: 'Руководство разработчика FreeBSD'
trademarks: ["freebsd", "apple", "ibm", "ieee", "intel", "linux", "microsoft", "opengroup", "sun", "general"]
---
diff --git a/documentation/content/ru/books/developers-handbook/book.po b/documentation/content/ru/books/developers-handbook/book.po
index cf8b6b30d0..61ebb4eb9f 100644
--- a/documentation/content/ru/books/developers-handbook/book.po
+++ b/documentation/content/ru/books/developers-handbook/book.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2022-07-07 23:23-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/"
@@ -18,11 +18,13 @@ msgstr ""
"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
+#. type: YAML Front Matter: description
#: documentation/content/en/books/developers-handbook/book.adoc:1
#, no-wrap
msgid "For people who want to develop software for FreeBSD (and not just people who are developing FreeBSD itself)"
-msgstr "Для тех, кто хочет разрабатывать программное обеспечение для FreeBSD (а не только для тех, кто разрабатывает саму FreeBSD)"
+msgstr ""
+"Для тех, кто хочет разрабатывать программное обеспечение для FreeBSD (а не "
+"только для тех, кто разрабатывает саму FreeBSD)"
#. type: Title =
#: documentation/content/en/books/developers-handbook/book.adoc:1
@@ -31,12 +33,12 @@ msgstr "Для тех, кто хочет разрабатывать програ
msgid "FreeBSD Developers' Handbook"
msgstr "Руководство разработчика FreeBSD"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/book.adoc:49
msgid "Abstract"
msgstr "Аннотация"
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/book.adoc:54
msgid ""
"Welcome to the Developers' Handbook. This manual is a _work in progress_ "
@@ -49,22 +51,22 @@ msgstr ""
"отсутствуют, а существующие нуждаются в обновлении. Если вы хотите помочь с "
"этим проектом, отправьте письмо на {freebsd-doc}."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/book.adoc:57
msgid ""
-"The latest version of this document is always available from the "
-"link:https://www.FreeBSD.org[FreeBSD World Wide Web server]. It may also be "
-"downloaded in a variety of formats and compression options from the "
-"link:https://download.freebsd.org/doc/[FreeBSD download server] or one of "
-"the numerous extref:{handbook}[mirror sites, mirrors]."
+"The latest version of this document is always available from the link:"
+"https://www.FreeBSD.org[FreeBSD World Wide Web server]. It may also be "
+"downloaded in a variety of formats and compression options from the link:"
+"https://download.freebsd.org/doc/[FreeBSD download server] or one of the "
+"numerous extref:{handbook}[mirror sites, mirrors]."
msgstr ""
-"Последняя версия этого документа всегда доступна по ссылке link:https://"
-"www.FreeBSD.org[веб-сервер FreeBSD]. Его также можно загрузить в различных "
+"Последняя версия этого документа всегда доступна по ссылке link:https://www."
+"FreeBSD.org[веб-сервер FreeBSD]. Его также можно загрузить в различных "
"форматах и с разными вариантами сжатия с link:https://download.freebsd.org/"
-"doc/[сервера загрузки FreeBSD] или одного из многочисленных extref:{handbook}"
-"[зеркальных сайтов, mirrors]."
+"doc/[сервера загрузки FreeBSD] или одного из многочисленных "
+"extref:{handbook}[зеркальных сайтов, mirrors]."
-#. type: .abstract-title
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/book.adoc:59
msgid "'''"
msgstr "'''"
diff --git a/documentation/content/ru/books/developers-handbook/introduction/_index.adoc b/documentation/content/ru/books/developers-handbook/introduction/_index.adoc
index d212e92f3a..926cfbca46 100644
--- a/documentation/content/ru/books/developers-handbook/introduction/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/introduction/_index.adoc
@@ -9,7 +9,7 @@ next: books/developers-handbook/tools
params:
path: /books/developers-handbook/introduction/
prev: books/developers-handbook/parti
-showBookMenu: true
+showBookMenu: 'true'
tags: ["introduction", "Developing on FreeBSD", "BSD Vision", "Architectural Guidelines"]
title: 'Глава 1. Введение'
weight: 2
diff --git a/documentation/content/ru/books/developers-handbook/introduction/_index.po b/documentation/content/ru/books/developers-handbook/introduction/_index.po
index 8c010f6a5d..56512b6e95 100644
--- a/documentation/content/ru/books/developers-handbook/introduction/_index.po
+++ b/documentation/content/ru/books/developers-handbook/introduction/_index.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
"PO-Revision-Date: 2025-07-06 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
@@ -18,13 +18,13 @@ msgstr ""
"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
+#. type: YAML Front Matter: description
#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:1
#, no-wrap
msgid "Introduction to the FreeBSD Developers Handbook"
msgstr "Введение в Руководство разработчика FreeBSD"
-#. type: Yaml Front Matter Hash Value: title
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/introduction/_index.adoc:1
#, no-wrap
msgid "Chapter 1. Introduction"
@@ -179,7 +179,7 @@ msgid ""
"README.md[README.md] file."
msgstr ""
"Полный исходный код FreeBSD доступен в нашем link:https://cgit.freebsd.org/"
-"src/[публичном Git-репозитории]. Исходный код обычно устанавливается в "
-"[.filename]#/usr/src#. Структура дерева каталогов исходного кода описана в "
+"src/[публичном Git-репозитории]. Исходный код обычно устанавливается в [."
+"filename]#/usr/src#. Структура дерева каталогов исходного кода описана в "
"файле link:https://cgit.freebsd.org/src/tree/README.md[README.md] на верхнем "
"уровне дерева."
diff --git a/documentation/content/ru/books/developers-handbook/introduction/chapter.adoc b/documentation/content/ru/books/developers-handbook/introduction/chapter.adoc
deleted file mode 100644
index c9cab95af5..0000000000
--- a/documentation/content/ru/books/developers-handbook/introduction/chapter.adoc
+++ /dev/null
@@ -1,140 +0,0 @@
----
-title: Глава 1. Введение
-authors:
- - author: Murray Stokely
- - author: Jeroen Ruigrok van der Werven
----
-
-[[introduction]]
-= Введение
-:doctype: book
-:toc: macro
-:toclevels: 1
-:icons: font
-:sectnums:
-:sectnumlevels: 6
-:sectnumoffset: 1
-:partnums:
-:source-highlighter: rouge
-:experimental:
-:images-path: books/developers-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::[]
-
-[[introduction-devel]]
-== Разработка во FreeBSD
-
-Итак, у нас все есть. Система полностью установлена и вы готовы начать программировать. Но с чего начать? Что предоставляет FreeBSD? Что она может дать мне как программисту?
-
-Вот те из некоторых вопросов, на которые пытается дать ответ эта глава. Конечно, программирование, как и любая другая область деятельности, имеет разные уровни профессионального мастерства. Для некоторых это хобби, для других это профессия. Информация в этой главе может в большей степени пригодиться начинающему программисту, но может также оказаться полезной программисту, делающему первые шаги на платформе FreeBSD.
-
-[[introduction-bsdvision]]
-== Подход BSD
-
-Создать самую лучшую UNIX(R)-подобную операционную систему, благодаря оригинальной идеологии программных средств, а также полезности, производительности и надёжности.
-
-[[introduction-archguide]]
-== Архитектурные концепции
-
-Наша идеология может быть описана в следующих ключевых положениях
-
-* Не добавлять новой функциональности, кроме случаев, когда нельзя выполнить конкретную работу без нее.
-* Решить, чего в системе не будет, так же важно, как и определение того, чего в системе не будет. Не пытайтесь включить в систему все; лучше сделать систему расширяемой так, что дополнительные потребности могут быть реализованы в режиме совместимости.
-* Единственное, что может быть лучше обобщения на основе одного примера, это обобщение вообще без примеров.
-* Если проблема до конца не понята, наверное, лучше вовсе не давать ее решения.
-* Если вы можете сделать 90 процентов результата ценой 10 процентов работы, найдите более простое решение.
-* Старайтесь отделять сложные вещи.
-* Дайте механизм, а не правила. В частности, оставьте соглашения по пользовательскому интерфейсу клиенту.
-
-Из Scheifler Gettys: "X Window System"
-
-[[introduction-layout]]
-== Структура каталога [.filename]#/usr/src#
-
-Полный исходный код FreeBSD располагается в нашем общедоступном хранилище CVS. Исходный код обычно устанавливается в [.filename]#/usr/src#, который содержит следующие подкаталоги:
-
-[.informaltable]
-[cols="1,1", frame="none", options="header"]
-|===
-| Каталог
-| Описание
-
-|[.filename]#bin/#
-|Исходный код файлов из [.filename]#/bin#
-
-|[.filename]#contrib/#
-|Исходный код файлов программного обеспечения сторонних разработчиков.
-
-|[.filename]#crypto/#
-|Исходный код криптографической подсистемы
-
-|[.filename]#etc/#
-|Исходный код файлов из каталога [.filename]#/etc#
-
-|[.filename]#games/#
-|Исходный код файлов из [.filename]#/usr/games#
-
-|[.filename]#gnu/#
-|Утилиты, подпадающие под действие GNU Public License
-
-|[.filename]#include/#
-|Исходный код файлов из [.filename]#/usr/include#
-
-|[.filename]#kerberosIV/#
-|Исходный код Kerberos версии IV
-
-|[.filename]#kerberos5/#
-|Исходный код Kerberos версии 5
-
-|[.filename]#lib/#
-|Исходный код файлов из [.filename]#/usr/lib#
-
-|[.filename]#libexec/#
-|Исходный код файлов из [.filename]#/usr/libexec#
-
-|[.filename]#release/#
-|Файлы, которые требуются для создания релиза FreeBSD
-
-|[.filename]#sbin/#
-|Исходный код файлов из [.filename]#/sbin#
-
-|[.filename]#secure/#
-|Исходный код FreeSec
-
-|[.filename]#share/#
-|Исходный код файлов из [.filename]#/usr/share#
-
-|[.filename]#sys/#
-|Исходный код ядра
-
-|[.filename]#tools/#
-|Утилиты, используемые для поддержки и тестирования FreeBSD
-
-|[.filename]#usr.bin/#
-|Исходный код файлов из [.filename]#/usr/bin#
-
-|[.filename]#usr.sbin/#
-|Исходный код файлов из [.filename]#/usr/sbin#
-|===
diff --git a/documentation/content/ru/books/developers-handbook/ipv6/_index.adoc b/documentation/content/ru/books/developers-handbook/ipv6/_index.adoc
index 70f6853b87..a1c4c5220b 100644
--- a/documentation/content/ru/books/developers-handbook/ipv6/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/ipv6/_index.adoc
@@ -7,7 +7,7 @@ next: books/developers-handbook/partiii
params:
path: /books/developers-handbook/ipv6/
prev: books/developers-handbook/sockets
-showBookMenu: true
+showBookMenu: 'true'
tags: ["IPv6", "FreeBSD"]
title: 'Глава 8. Внутреннее устройство IPv6'
weight: 10
@@ -63,7 +63,7 @@ endif::[]
Функции, связанные с IPv6, соответствуют или пытаются соответствовать последнему набору спецификаций IPv6. Для дальнейшего использования мы приводим некоторые из соответствующих документов ниже (_ПРИМЕЧАНИЕ_: это не полный список — его слишком сложно поддерживать...).
-Для подробностей обратитесь к соответствующей главе документа, RFC, страницам Справосника или комментариям в исходном коде.
+Для подробностей обратитесь к соответствующей главе документа, RFC, страницам Справочника или комментариям в исходном коде.
Тесты на соответствие стандартам были проведены для KAME STABLE в проекте TAHI. Результаты можно посмотреть по ссылке http://www.tahi.org/report/KAME/[http://www.tahi.org/report/KAME/]. Мы также участвовали в тестах IOL Университета Нью-Гэмпшира (http://www.iol.unh.edu/[http://www.iol.unh.edu/]) в прошлом, используя наши предыдущие версии.
@@ -626,7 +626,7 @@ IPsec состоит в основном из трех компонент.
** HMAC MD5 с 128-битной криптографической контрольной суммой + 64-битная защита от повторного воспроизведения ([.filename]#rfc2085.txt#)
** SHA1 с ключом и с 160-битной криптографической контрольной суммой +
-32-битное дополнение ([.filename]#rfc1852.txt#)
+ 32-битное дополнение ([.filename]#rfc1852.txt#)
IPsec (в ядре) и IKE (в пользовательском пространстве как "racoon") были протестированы на нескольких мероприятиях по тестированию взаимодействия и известно, что они хорошо работают со многими другими реализациями. Кроме того, текущая реализация IPsec поддерживает довольно широкий спектр криптографических алгоритмов IPsec, описанных в RFC (мы поддерживаем только алгоритмы без проблем с интеллектуальной собственностью).
diff --git a/documentation/content/ru/books/developers-handbook/ipv6/_index.po b/documentation/content/ru/books/developers-handbook/ipv6/_index.po
index d842459698..acc02dd1fd 100644
--- a/documentation/content/ru/books/developers-handbook/ipv6/_index.po
+++ b/documentation/content/ru/books/developers-handbook/ipv6/_index.po
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
-"PO-Revision-Date: 2025-09-23 04:45+0000\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
+"PO-Revision-Date: 2025-10-29 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksdevelopers-handbookipv6_index/ru/>\n"
@@ -25,7 +25,7 @@ msgstr ""
msgid "IPv6 Internals"
msgstr "Внутреннее устройство IPv6"
-#. type: Yaml Front Matter Hash Value: title
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:1
#, no-wrap
msgid "Chapter 8. IPv6 Internals"
@@ -79,7 +79,7 @@ msgid ""
"pages, or comments in the source code."
msgstr ""
"Для подробностей обратитесь к соответствующей главе документа, RFC, "
-"страницам Справосника или комментариям в исходном коде."
+"страницам Справочника или комментариям в исходном коде."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:72
@@ -439,8 +439,8 @@ msgstr ""
"дублирования адресов (DAD — Duplicated Address Detection) и обнаружение "
"недоступности соседей (Neighbor Unreachability Detection). В ближайшем "
"будущем мы добавим поддержку прокси-объявлений соседей (Proxy Neighbor "
-"Advertisement) в ядро и команду передачи непрошенных объявлений соседей "
-"(Unsolicited Neighbor Advertisement) в качестве инструмента администратора."
+"Advertisement) в ядро и команду передачи непрошенных объявлений соседей ("
+"Unsolicited Neighbor Advertisement) в качестве инструмента администратора."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:174
@@ -525,10 +525,10 @@ msgid ""
msgstr ""
"Правило определения локальной IPv6 сети (RFC2461) значительно отличается от "
"предположений в сетевом коде BSD. На данный момент не поддерживается правило "
-"определения локальной сети при пустом списке маршрутизаторов по умолчанию "
-"(RFC2461, раздел 5.2, последнее предложение во 2-м абзаце - обратите "
-"внимание, что в спецификации некорректно используются слова \"host\" и "
-"\"node\" в нескольких местах раздела)."
+"определения локальной сети при пустом списке маршрутизаторов по умолчанию ("
+"RFC2461, раздел 5.2, последнее предложение во 2-м абзаце - обратите "
+"внимание, что в спецификации некорректно используются слова \"host\" и \"node"
+"\" в нескольких местах раздела)."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:194
@@ -629,11 +629,11 @@ msgid ""
msgstr ""
"Демоны маршрутизации и программы настройки, такие как man:route6d[8] и "
"man:ifconfig[8], должны управлять \"встроенным\" индексом зоны. Эти "
-"программы используют сокеты маршрутизации и ioctl (например, "
-"SIOCGIFADDR_IN6), и API ядра будет возвращать IPv6-адреса с заполненным "
-"вторым 16-битным словом. API предназначены для управления внутренними "
-"структурами ядра. Программы, использующие эти API, в любом случае должны "
-"быть готовы к различиям в ядрах."
+"программы используют сокеты маршрутизации и ioctl (например, SIOCGIFADDR_IN6)"
+", и API ядра будет возвращать IPv6-адреса с заполненным вторым 16-битным "
+"словом. API предназначены для управления внутренними структурами ядра. "
+"Программы, использующие эти API, в любом случае должны быть готовы к "
+"различиям в ядрах."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:230
@@ -742,7 +742,8 @@ msgid ""
"fe80:2::%ep0/64 link#2 UC ep0\n"
msgstr ""
"Internet6:\n"
-"Destination Gateway Flags Netif Expire\n"
+"Destination Gateway Flags Netif "
+"Expire\n"
"fe80:1::%ed0/64 link#1 UC ed0\n"
"fe80:2::%ep0/64 link#2 UC ep0\n"
@@ -786,13 +787,13 @@ msgid ""
"table, and loopback interface joins node-local multicast group ff01::1."
msgstr ""
"Каждый интерфейс присоединяется к запрашиваемому широковещательному адресу и "
-"линк-локальным широковещательным адресам всех узлов (например, "
-"fe80::1:ff01:6317 и ff02::1 соответственно на соединении, к которому "
-"подключен интерфейс). В дополнение к линк-локальному адресу, адрес обратной "
-"петли (::1 — loopback) будет назначен интерфейсу обратной петли. "
-"Также, ::1/128 и ff01::/32 автоматически добавляются в таблицу "
-"маршрутизации, а loopback-интерфейс (интерфейс обратной петли) "
-"присоединяется к групповому адресу в пределах узла ff01::1."
+"линк-локальным широковещательным адресам всех узлов (например, fe80::1:ff01:"
+"6317 и ff02::1 соответственно на соединении, к которому подключен интерфейс)"
+". В дополнение к линк-локальному адресу, адрес обратной петли (::1 — "
+"loopback) будет назначен интерфейсу обратной петли. Также, ::1/128 и ff01::/"
+"32 автоматически добавляются в таблицу маршрутизации, а loopback-интерфейс ("
+"интерфейс обратной петли) присоединяется к групповому адресу в пределах узла "
+"ff01::1."
#. type: Title =====
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:273
@@ -1107,8 +1108,8 @@ msgstr ""
"интерфейса — описанный в crossref:ipv6[ipv6-scope-index,23.5.1.3] — помогает "
"нам выбрать правильный исходный адрес. Эти встроенные индексы не будут "
"передаваться по сети). Если исходящий интерфейс имеет несколько адресов для "
-"данной зоны, исходный адрес выбирается на основе наибольшего соответствия "
-"(правило 3). Предположим, что 2001:0DB8:808:1:200:f8ff:fe01:6317 и "
+"данной зоны, исходный адрес выбирается на основе наибольшего соответствия ("
+"правило 3). Предположим, что 2001:0DB8:808:1:200:f8ff:fe01:6317 и "
"2001:0DB8:9:124:200:f8ff:fe01:6317 назначены исходящему интерфейсу. "
"2001:0DB8:808:1:200:f8ff:fe01:6317 выбирается в качестве исходящего адреса "
"для адреса назначения 2001:0DB8:800::1."
@@ -1129,8 +1130,8 @@ msgstr ""
"реализации\". Существуют случаи, когда мы не используем это правило. Один из "
"примеров — установленное TCP-соединение, где мы используем адрес, "
"сохраненный в tcb, в качестве источника. Другой пример — исходящий адрес для "
-"Объявления Соседа (Neighbor Advertisement). Согласно спецификации (RFC2461 "
-"7.2.2) источник NA должен быть целевым адресом соответствующего NS. В этом "
+"Объявления Соседа (Neighbor Advertisement). Согласно спецификации (RFC2461 7."
+"2.2) источник NA должен быть целевым адресом соответствующего NS. В этом "
"случае мы следуем спецификации, а не приведенному выше правилу наибольшего "
"совпадения."
@@ -1148,16 +1149,16 @@ msgid ""
"(NOTE: there is some debate underway in IETF ipngwg on how to use "
"\"deprecated\" address)."
msgstr ""
-"Для новых соединений (когда правило 1 не применяется), устаревшие адреса "
-"(адреса с предпочтительным временем жизни = 0) не будут выбираться в "
-"качестве исходящего адреса, если доступны другие варианты. Если других "
-"вариантов нет, устаревший адрес будет использован в качестве последнего "
-"средства. Если есть несколько устаревших адресов, для выбора между ними "
-"будет применено указанное выше правило области видимости. Если вы хотите "
-"запретить использование устаревших адресов по какой-либо причине, установите "
-"параметр net.inet6.ip6.use_deprecated в значение 0. Проблема, связанная с "
-"устаревшими адресами, описана в RFC2462 5.5.4 (ПРИМЕЧАНИЕ: в IETF ipngwg "
-"ведутся дебаты о том, как использовать \"устаревшие\" адреса)."
+"Для новых соединений (когда правило 1 не применяется), устаревшие адреса ("
+"адреса с предпочтительным временем жизни = 0) не будут выбираться в качестве "
+"исходящего адреса, если доступны другие варианты. Если других вариантов нет, "
+"устаревший адрес будет использован в качестве последнего средства. Если есть "
+"несколько устаревших адресов, для выбора между ними будет применено "
+"указанное выше правило области видимости. Если вы хотите запретить "
+"использование устаревших адресов по какой-либо причине, установите параметр "
+"net.inet6.ip6.use_deprecated в значение 0. Проблема, связанная с устаревшими "
+"адресами, описана в RFC2462 5.5.4 (ПРИМЕЧАНИЕ: в IETF ipngwg ведутся дебаты "
+"о том, как использовать \"устаревшие\" адреса)."
#. type: Title ====
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:376
@@ -1187,8 +1188,8 @@ msgid ""
"following to the kernel configuration file:"
msgstr ""
"Если вы хотите попробовать джамбо-пакеты, сначала необходимо "
-"переконфигурировать ядро, чтобы MTU интерфейса loopback превышал 65 535 "
-"байт; добавьте следующее в конфигурационный файл ядра:"
+"переконфигурировать ядро, чтобы MTU интерфейса loopback превышал 65 535 байт;"
+" добавьте следующее в конфигурационный файл ядра:"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:384
@@ -1324,8 +1325,8 @@ msgstr ""
"содержать джамбограмму с длиной > 2G на 32-битных архитектурах CPU. Если мы "
"хотим правильно поддерживать джамбограммы, это поле необходимо расширить, "
"чтобы оно могло содержать 4G + заголовок IPv6 + заголовок канального уровня. "
-"Следовательно, его необходимо расширить как минимум до `int64_t` "
-"(`u_int32_t` НЕ достаточно)."
+"Следовательно, его необходимо расширить как минимум до `int64_t` (`u_int32_t`"
+" НЕ достаточно)."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:430
@@ -1386,15 +1387,15 @@ msgstr ""
"реализован код IPv4 в BSD, может произойти переполнение стека ядра из-за "
"длинной цепочки вызовов функций. Код в sys/netinet6 тщательно спроектирован, "
"чтобы избежать переполнения стека ядра, поэтому он определяет собственную "
-"структуру переключения протоколов — \"struct ip6protosw\" (см. "
-"[.filename]#netinet6/ip6protosw.h#). Для IPv4 части (sys/netinet) подобных "
-"обновлений не было сделано для сохранения совместимости, но в прототип "
-"pr_input() внесено небольшое изменение. Поэтому также определена \"struct "
-"ipprotosw\". В результате, если получен пакет IPsec-over-IPv4 с большим "
-"количеством заголовков IPsec, стек ядра может переполниться. С IPsec-over-"
-"IPv6 такой проблемы нет. (Разумеется, чтобы все эти заголовки IPsec были "
-"обработаны, каждый такой заголовок должен пройти все проверки IPsec. Поэтому "
-"анонимный злоумышленник не сможет осуществить подобную атаку.)"
+"структуру переключения протоколов — \"struct ip6protosw\" (см. [.filename]#"
+"netinet6/ip6protosw.h#). Для IPv4 части (sys/netinet) подобных обновлений не "
+"было сделано для сохранения совместимости, но в прототип pr_input() внесено "
+"небольшое изменение. Поэтому также определена \"struct ipprotosw\". В "
+"результате, если получен пакет IPsec-over-IPv4 с большим количеством "
+"заголовков IPsec, стек ядра может переполниться. С IPsec-over-IPv6 такой "
+"проблемы нет. (Разумеется, чтобы все эти заголовки IPsec были обработаны, "
+"каждый такой заголовок должен пройти все проверки IPsec. Поэтому анонимный "
+"злоумышленник не сможет осуществить подобную атаку.)"
#. type: Title ====
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:446
@@ -1426,8 +1427,8 @@ msgid ""
"RFC2553, RFC2292 and upcoming Internet drafts."
msgstr ""
"Для программирования в пользовательском пространстве мы поддерживаем API "
-"сокетов IPv6, как указано в RFC2553, RFC2292 и готовящихся интернет-"
-"черновиках."
+"сокетов IPv6, как указано в RFC2553, RFC2292 и готовящихся "
+"интернет-черновиках."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:459
@@ -1693,8 +1694,8 @@ msgstr ""
"два сокета). Используйте man:getaddrinfo[3] с AI_PASSIVE в ai_flags, а также "
"man:socket[2] и man:bind[2] для всех возвращённых адресов. Открыв несколько "
"сокетов, вы можете принимать соединения сокетом соответствующей адресной "
-"семьи. IPv4-соединения будут приниматься сокетом AF_INET, а IPv6-соединения "
-"— сокетом AF_INET6."
+"семьи. IPv4-соединения будут приниматься сокетом AF_INET, а IPv6-соединения —"
+" сокетом AF_INET6."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:545
@@ -1772,9 +1773,9 @@ msgid ""
"(which works on multiple IPv6 kernels), we believe that the following is the "
"key to the success:"
msgstr ""
-"Совет разработчикам приложений: для создания переносимого IPv6-приложения "
-"(которое работает на различных IPv6-ядрах), мы считаем, что следующие "
-"моменты являются ключом к успеху:"
+"Совет разработчикам приложений: для создания переносимого IPv6-приложения ("
+"которое работает на различных IPv6-ядрах), мы считаем, что следующие моменты "
+"являются ключом к успеху:"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:567
@@ -2160,8 +2161,8 @@ msgid ""
"IPv4 host in the IPv4 ocean."
msgstr ""
"_Транслятор А_ --- Он используется на раннем этапе перехода, чтобы позволить "
-"установить соединение с IPv6-хоста на IPv6-острове к IPv4-хосту в IPv4-"
-"океане."
+"установить соединение с IPv6-хоста на IPv6-острове к IPv4-хосту в "
+"IPv4-океане."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:683
@@ -2402,13 +2403,13 @@ msgid ""
"internet-drafts/]). (NOTE: IKE specifications, [.filename]#rfc241[7-9].txt# "
"are implemented in userland, as \"racoon\" IKE daemon)"
msgstr ""
-"Спецификация \"new IPsec\" описана в [.filename]#rfc240[1-6].txt#, "
-"[.filename]#rfc241[01].txt#, [.filename]#rfc2451.txt# и [.filename]#draft-"
+"Спецификация \"new IPsec\" описана в [.filename]#rfc240[1-6].txt#, [."
+"filename]#rfc241[01].txt#, [.filename]#rfc2451.txt# и [.filename]#draft-"
"mcdonald-simple-ipsec-api-01.txt# (черновик устарел, но его можно взять по "
"ссылке: link:ftp://ftp.kame.net/pub/internet-drafts/[ ftp://ftp.kame.net/pub/"
-"internet-drafts/]). (ПРИМЕЧАНИЕ: Спецификации IKE, "
-"[.filename]#rfc241[7-9].txt#, реализованы в пользовательском пространстве в "
-"виде демона IKE \"racoon\")"
+"internet-drafts/]). (ПРИМЕЧАНИЕ: Спецификации IKE, [.filename]#rfc241[7-9]."
+"txt#, реализованы в пользовательском пространстве в виде демона IKE \"racoon"
+"\")"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:746
@@ -2433,8 +2434,8 @@ msgstr ""
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:751
msgid "keyed MD5 with 128bit crypto checksum ([.filename]#rfc1828.txt#)"
msgstr ""
-"MD5 с ключом и с 128-битной криптографической контрольной суммой "
-"([.filename]#rfc1828.txt#)"
+"MD5 с ключом и с 128-битной криптографической контрольной суммой ([."
+"filename]#rfc1828.txt#)"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:752
@@ -2447,8 +2448,8 @@ msgstr ""
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:753
msgid "HMAC MD5 with 128bit crypto checksum ([.filename]#rfc2085.txt#)"
msgstr ""
-"HMAC MD5 с 128-битной криптографической контрольной суммой "
-"([.filename]#rfc2085.txt#)"
+"HMAC MD5 с 128-битной криптографической контрольной суммой ([."
+"filename]#rfc2085.txt#)"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:754
@@ -2464,8 +2465,7 @@ msgstr "old IPsec ESP"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:758
msgid "null encryption (no document, similar to [.filename]#rfc2410.txt#)"
-msgstr ""
-"нулевое шифрование (нет документа, аналогично [.filename]#rfc2410.txt#)"
+msgstr "нулевое шифрование (нет документа, аналогично [.filename]#rfc2410.txt#)"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:759
@@ -2495,15 +2495,15 @@ msgstr ""
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:766
msgid "HMAC MD5 with 96bit crypto checksum ([.filename]#rfc2403.txt#)"
msgstr ""
-"HMAC MD5 с 96-битной криптографической контрольной суммой "
-"([.filename]#rfc2403.txt#)"
+"HMAC MD5 с 96-битной криптографической контрольной суммой ([."
+"filename]#rfc2403.txt#)"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:767
msgid "HMAC SHA1 with 96bit crypto checksum ([.filename]#rfc2404.txt#)"
msgstr ""
-"HMAC SHA1 с 96-битной криптографической контрольной суммой "
-"([.filename]#rfc2404.txt#)"
+"HMAC SHA1 с 96-битной криптографической контрольной суммой ([."
+"filename]#rfc2404.txt#)"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:769
@@ -2521,8 +2521,8 @@ msgid ""
"DES-CBC with derived IV ([.filename]#draft-ietf-ipsec-ciph-des-"
"derived-01.txt#, draft expired)"
msgstr ""
-"DES-CBC с производным IV ([.filename]#draft-ietf-ipsec-ciph-des-"
-"derived-01.txt#, черновик истек)"
+"DES-CBC с производным IV ([.filename]#draft-ietf-ipsec-ciph-des-derived-01."
+"txt#, черновик истек)"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:773
@@ -2615,8 +2615,8 @@ msgid ""
"ECN-friendly IPsec tunnel is supported as described in [.filename]#draft-"
"ipsec-ecn-00.txt#."
msgstr ""
-"Поддерживается ECN-совместимый IPsec-туннель, как описано в "
-"[.filename]#draft-ipsec-ecn-00.txt#."
+"Поддерживается ECN-совместимый IPsec-туннель, как описано в [.filename"
+"]#draft-ipsec-ecn-00.txt#."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:801
@@ -2643,8 +2643,8 @@ msgid ""
msgstr ""
"Чтобы сделать IPsec-туннель дружественным к ECN, следует изменить процедуры "
"инкапсуляции и декапсуляции. Это описано в http://www.aciri.org/floyd/papers/"
-"draft-ipsec-ecn-00.txt[ http://www.aciri.org/floyd/papers/draft-ipsec-"
-"ecn-00.txt], глава 3."
+"draft-ipsec-ecn-00.txt[ http://www.aciri.org/floyd/papers/draft-ipsec-ecn-00."
+"txt], глава 3."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:806
@@ -2653,8 +2653,8 @@ msgid ""
"net.inet.ipsec.ecn (or net.inet6.ipsec6.ecn) to some value:"
msgstr ""
"Реализация туннеля IPsec может обеспечить три варианта поведения, в "
-"зависимости от значения параметра `net.inet.ipsec.ecn` (или "
-"`net.inet6.ipsec6.ecn`):"
+"зависимости от значения параметра `net.inet.ipsec.ecn` (или `net.inet6.ipsec6"
+".ecn`):"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:808
@@ -2724,8 +2724,10 @@ msgid ""
" inner to outer. is 1, enable ECN CE bit on\n"
" set ECN CE bit to 0. the inner.\n"
msgstr ""
-"ECN allowed copy TOS bits except for ECN use inner TOS bits with some\n"
-" CE (masked with 0xfe) from change. if outer ECN CE bit\n"
+"ECN allowed copy TOS bits except for ECN use inner TOS bits with "
+"some\n"
+" CE (masked with 0xfe) from change. if outer ECN CE "
+"bit\n"
" inner to outer. is 1, enable ECN CE bit on\n"
" set ECN CE bit to 0. the inner.\n"
@@ -2749,8 +2751,8 @@ msgid ""
"if the other end is very strict about TOS bit, use \"RFC2401\" (sysctl value "
"-1)."
msgstr ""
-"если другая сторона очень строга к биту TOS, используйте \"RFC2401\" "
-"(значение sysctl -1)."
+"если другая сторона очень строга к биту TOS, используйте \"RFC2401\" ("
+"значение sysctl -1)."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:837
@@ -2774,9 +2776,9 @@ msgid ""
"www.aciri.org/floyd/papers/draft-ipsec-ecn-00.txt], RFC2481 (Explicit "
"Congestion Notification), src/sys/netinet6/{ah,esp}_input.c"
msgstr ""
-"http://www.aciri.org/floyd/papers/draft-ipsec-ecn-00.txt[ http://"
-"www.aciri.org/floyd/papers/draft-ipsec-ecn-00.txt], RFC2481 (Явное "
-"Уведомление о Перегрузке), src/sys/netinet6/{ah,esp}_input.c"
+"http://www.aciri.org/floyd/papers/draft-ipsec-ecn-00.txt[ http://www.aciri."
+"org/floyd/papers/draft-ipsec-ecn-00.txt], RFC2481 (Явное Уведомление о "
+"Перегрузке), src/sys/netinet6/{ah,esp}_input.c"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/ipv6/_index.adoc:845
diff --git a/documentation/content/ru/books/developers-handbook/kernelbuild/_index.adoc b/documentation/content/ru/books/developers-handbook/kernelbuild/_index.adoc
index a020ccd898..0c9906036a 100644
--- a/documentation/content/ru/books/developers-handbook/kernelbuild/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/kernelbuild/_index.adoc
@@ -1,11 +1,11 @@
---
-authors:
+authors: ~
description: 'Сборка и установка ядра FreeBSD'
next: books/developers-handbook/kerneldebug
params:
path: /books/developers-handbook/kernelbuild/
prev: books/developers-handbook/partiii
-showBookMenu: true
+showBookMenu: 'true'
tags: ["building", "installing", "kernel", "FreeBSD"]
title: 'Глава 9. Сборка и установка ядра FreeBSD'
weight: 12
diff --git a/documentation/content/ru/books/developers-handbook/kernelbuild/_index.po b/documentation/content/ru/books/developers-handbook/kernelbuild/_index.po
index 0230e59c60..0d85aa577c 100644
--- a/documentation/content/ru/books/developers-handbook/kernelbuild/_index.po
+++ b/documentation/content/ru/books/developers-handbook/kernelbuild/_index.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
"PO-Revision-Date: 2025-06-24 20:10+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
@@ -25,7 +25,7 @@ msgstr ""
msgid "Building and Installing a FreeBSD Kernel"
msgstr "Сборка и установка ядра FreeBSD"
-#. type: Yaml Front Matter Hash Value: title
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:1
#, no-wrap
msgid "Chapter 9. Building and Installing a FreeBSD Kernel"
@@ -49,8 +49,8 @@ msgid ""
"extref:{handbook}kernelconfig/[Building and Installing a Custom Kernel, "
"kernelconfig-building] chapter of the FreeBSD Handbook."
msgstr ""
-"Поддерживаемая процедура сборки и установки ядра описана в главе extref:"
-"{handbook}kernelconfig/[Сборка и установка пользовательского ядра, "
+"Поддерживаемая процедура сборки и установки ядра описана в главе "
+"extref:{handbook}kernelconfig/[Сборка и установка пользовательского ядра, "
"kernelconfig-building] Руководства FreeBSD."
#. type: delimited block = 4
@@ -87,7 +87,7 @@ msgstr ""
"файле ядра были изменены только одна или две опции. С другой стороны, это "
"может привести к неожиданным сбоям при сборке ядра."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/kernelbuild/_index.adoc:72
msgid "Run man:config[8] to generate the kernel source code:"
msgstr "Выполните man:config[8] для генерации исходного кода ядра:"
diff --git a/documentation/content/ru/books/developers-handbook/kerneldebug/_index.adoc b/documentation/content/ru/books/developers-handbook/kerneldebug/_index.adoc
index 5ac6d8df9f..f5660f10d8 100644
--- a/documentation/content/ru/books/developers-handbook/kerneldebug/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/kerneldebug/_index.adoc
@@ -11,7 +11,7 @@ next: books/developers-handbook/partiv
params:
path: /books/developers-handbook/kerneldebug/
prev: books/developers-handbook/kernelbuild
-showBookMenu: true
+showBookMenu: 'true'
tags: ["Debugging", "Dump", "kgdb", "DDB", "GDB"]
title: 'Глава 10. Отладка ядра'
weight: 13
diff --git a/documentation/content/ru/books/developers-handbook/kerneldebug/_index.po b/documentation/content/ru/books/developers-handbook/kerneldebug/_index.po
index dd46c18a3c..060717d0a0 100644
--- a/documentation/content/ru/books/developers-handbook/kerneldebug/_index.po
+++ b/documentation/content/ru/books/developers-handbook/kerneldebug/_index.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-06-29 21:20+0100\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/"
@@ -18,13 +18,13 @@ msgstr ""
"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
+#. type: YAML Front Matter: description
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:1
#, no-wrap
msgid "FreeBSD Kernel Debugging"
msgstr "Отладка ядра FreeBSD"
-#. type: Yaml Front Matter Hash Value: title
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:1
#, no-wrap
msgid "Chapter 10. Kernel Debugging"
@@ -47,11 +47,10 @@ msgstr "Получение аварийного дампа ядра"
msgid ""
"When running a development kernel (e.g., FreeBSD-CURRENT), such as a kernel "
"under extreme conditions (e.g., very high load averages, tens of thousands "
-"of connections, exceedingly high number of concurrent users, hundreds of "
-"man:jail[8]s, etc.), or using a new feature or device driver on FreeBSD-"
-"STABLE (e.g., PAE), sometimes a kernel will panic. In the event that it "
-"does, this chapter will demonstrate how to extract useful information out of "
-"a crash."
+"of connections, exceedingly high number of concurrent users, hundreds of man:"
+"jail[8]s, etc.), or using a new feature or device driver on FreeBSD-STABLE "
+"(e.g., PAE), sometimes a kernel will panic. In the event that it does, this "
+"chapter will demonstrate how to extract useful information out of a crash."
msgstr ""
"При работе с разрабатываемым ядром (например, FreeBSD-CURRENT), особенно в "
"экстремальных условиях (например, при очень высокой загрузке, десятках тысяч "
@@ -231,12 +230,12 @@ msgstr "Извлечение дампа ядра"
msgid ""
"Once a dump has been written to a dump device, the dump must be extracted "
"before the swap device is mounted. To extract a dump from a dump device, "
-"use the man:savecore[8] program. If `dumpdev` has been set in "
-"man:rc.conf[5], man:savecore[8] will be called automatically on the first "
-"multi-user boot after the crash and before the swap device is mounted. The "
+"use the man:savecore[8] program. If `dumpdev` has been set in man:rc."
+"conf[5], man:savecore[8] will be called automatically on the first multi-"
+"user boot after the crash and before the swap device is mounted. The "
"location of the extracted core is placed in the man:rc.conf[5] value "
-"`dumpdir`, by default [.filename]#/var/crash# and will be named "
-"[.filename]#vmcore.0#."
+"`dumpdir`, by default [.filename]#/var/crash# and will be named [."
+"filename]#vmcore.0#."
msgstr ""
"После записи дампа на устройство дампа, дамп должен быть извлечен до "
"монтирования устройства подкачки. Для извлечения дампа с устройства дампа "
@@ -250,20 +249,20 @@ msgstr ""
#. type: delimited block = 4
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:126
msgid ""
-"In the event that there is already a file called [.filename]#vmcore.0# in "
-"[.filename]#/var/crash# (or whatever `dumpdir` is set to), the kernel will "
+"In the event that there is already a file called [.filename]#vmcore.0# in [."
+"filename]#/var/crash# (or whatever `dumpdir` is set to), the kernel will "
"increment the trailing number for every crash to avoid overwriting an "
"existing [.filename]#vmcore# (e.g., [.filename]#vmcore.1#). man:savecore[8] "
-"will always create a symbolic link to named [.filename]#vmcore.last# in "
-"[.filename]#/var/crash# after a dump is saved. This symbolic link can be "
-"used to locate the name of the most recent dump."
+"will always create a symbolic link to named [.filename]#vmcore.last# in [."
+"filename]#/var/crash# after a dump is saved. This symbolic link can be used "
+"to locate the name of the most recent dump."
msgstr ""
-"В случае, если файл с именем [.filename]#vmcore.0# уже существует в "
-"[.filename]#/var/crash# (или в каталоге, указанном в параметре `dumpdir`), "
+"В случае, если файл с именем [.filename]#vmcore.0# уже существует в [."
+"filename]#/var/crash# (или в каталоге, указанном в параметре `dumpdir`), "
"ядро будет увеличивать завершающее число при каждом сбое, чтобы избежать "
-"перезаписи существующего файла [.filename]#vmcore# (например, "
-"[.filename]#vmcore.1#). man:savecore[8] всегда создает символическую ссылку "
-"с именем [.filename]#vmcore.last# в [.filename]#/var/crash# после сохранения "
+"перезаписи существующего файла [.filename]#vmcore# (например, [."
+"filename]#vmcore.1#). man:savecore[8] всегда создает символическую ссылку с "
+"именем [.filename]#vmcore.last# в [.filename]#/var/crash# после сохранения "
"дампа. Эта символическая ссылка может быть использована для определения "
"имени последнего дампа."
@@ -272,17 +271,17 @@ msgstr ""
msgid ""
"The man:crashinfo[8] utility generates a text file containing a summary of "
"information from a full memory dump or minidump. If `dumpdev` has been set "
-"in man:rc.conf[5], man:crashinfo[8] will be invoked automatically after "
-"man:savecore[8]. The output is saved to a file in `dumpdir` named "
-"[.filename]#core.txt.N#."
+"in man:rc.conf[5], man:crashinfo[8] will be invoked automatically after man:"
+"savecore[8]. The output is saved to a file in `dumpdir` named [."
+"filename]#core.txt.N#."
msgstr ""
"Утилита man:crashinfo[8] создаёт текстовый файл, содержащий сводную "
"информацию из полного дампа памяти или минидампа. Если параметр `dumpdev` "
"установлен в man:rc.conf[5], man:crashinfo[8] будет автоматически вызван "
-"после man:savecore[8]. Результат сохраняется в файл с именем "
-"[.filename]#core.txt.N# в директории `dumpdir`."
+"после man:savecore[8]. Результат сохраняется в файл с именем [."
+"filename]#core.txt.N# в директории `dumpdir`."
-#. type: delimited block = 4
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:135
msgid ""
"If you are testing a new kernel but need to boot a different one in order to "
@@ -385,9 +384,9 @@ msgid ""
"package:devel/gdb[]. An older version is also present in FreeBSD 11 and "
"earlier."
msgstr ""
-"Этот раздел посвящен man:kgdb[1]. Последняя версия включена в пакет "
-"package:devel/gdb[]. Более старая версия также присутствует в FreeBSD 11 и "
-"более ранних версиях."
+"Этот раздел посвящен man:kgdb[1]. Последняя версия включена в пакет package:"
+"devel/gdb[]. Более старая версия также присутствует в FreeBSD 11 и более "
+"ранних версиях."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:179
@@ -763,8 +762,8 @@ msgstr "# sysctl debug.kdb.enter=1\n"
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:354
msgid ""
"Alternatively, if you are at the system console, you may use a hot-key on "
-"the keyboard. The default break-to-debugger sequence is kbd:"
-"[Ctrl+Alt+ESC]. For syscons, this sequence can be remapped and some of the "
+"the keyboard. The default break-to-debugger sequence is kbd:[Ctrl+Alt"
+"+ESC]. For syscons, this sequence can be remapped and some of the "
"distributed maps out there do this, so check to make sure you know the right "
"sequence to use. There is an option available for serial consoles that "
"allows the use of a serial line BREAK on the console line to enter DDB "
@@ -1186,8 +1185,8 @@ msgstr "Онлайн-отладка ядра с использованием у
#. type: Plain text
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:555
msgid ""
-"The FreeBSD kernel provides a second KDB backend for on-line debugging: "
-"man:gdb[4]. This feature has been supported since FreeBSD 2.2, and it is "
+"The FreeBSD kernel provides a second KDB backend for on-line debugging: man:"
+"gdb[4]. This feature has been supported since FreeBSD 2.2, and it is "
"actually a very neat one."
msgstr ""
"Ядро FreeBSD предоставляет второй бэкенд KDB для отладки в реальном времени: "
@@ -1237,8 +1236,8 @@ msgstr ""
#. type: Plain text
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:571
msgid ""
-"Note that the `GDB` option is turned off by default in `GENERIC` kernels on "
-"-STABLE and -RELEASE branches, but enabled on -CURRENT."
+"Note that the `GDB` option is turned off by default in `GENERIC` kernels on -"
+"STABLE and -RELEASE branches, but enabled on -CURRENT."
msgstr ""
"Обратите внимание, что опция `GDB` отключена по умолчанию в ядрах `GENERIC` "
"для веток -STABLE и -RELEASE, но включена в -CURRENT."
@@ -1254,8 +1253,8 @@ msgstr ""
"После сборки скопируйте ядро на целевую машину и загрузите его. Подключите "
"последовательный порт целевой машины, у которого на устройстве uart "
"установлены флаги \"080\", к любому последовательному порту отладочной "
-"машины. Подробности о настройке флагов на устройстве uart смотрите в "
-"man:uart[4]."
+"машины. Подробности о настройке флагов на устройстве uart смотрите в man:"
+"uart[4]."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:578
@@ -1388,9 +1387,9 @@ msgstr ""
"могут отображаться как `<optimized out>`, что не позволяет их напрямую "
"исследовать с помощью `gdb`. Если это вызывает проблемы при отладке, можно "
"собрать ядро с пониженным уровнем оптимизации, что может улучшить видимость "
-"некоторых переменных. Это можно сделать, передав `COPTFLAGS=-O1` в "
-"man:make[1]. Однако определённые классы ошибок в ядре могут проявляться "
-"иначе (или вообще не проявляться) при изменении уровня оптимизации."
+"некоторых переменных. Это можно сделать, передав `COPTFLAGS=-O1` в man:"
+"make[1]. Однако определённые классы ошибок в ядре могут проявляться иначе "
+"(или вообще не проявляться) при изменении уровня оптимизации."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:640
@@ -1591,11 +1590,11 @@ msgstr ""
#. type: Plain text
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:702
msgid ""
-"Make sure physical DMA is enabled. You may need to add "
-"`hw.firewire.phydma_enable=1` to [.filename]#/boot/loader.conf#."
+"Make sure physical DMA is enabled. You may need to add `hw.firewire."
+"phydma_enable=1` to [.filename]#/boot/loader.conf#."
msgstr ""
-"Убедитесь, что физический DMA включен. Возможно, потребуется добавить "
-"`hw.firewire.phydma_enable=1` в [.filename]#/boot/loader.conf#."
+"Убедитесь, что физический DMA включен. Возможно, потребуется добавить `hw."
+"firewire.phydma_enable=1` в [.filename]#/boot/loader.conf#."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:703
@@ -1619,12 +1618,12 @@ msgstr "Включите `dcons` в [.filename]#/etc/ttys#."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:706
msgid ""
-"Optionally, to force `dcons` to be the high-level console, add "
-"`hw.firewire.dcons_crom.force_console=1` to [.filename]#loader.conf#."
+"Optionally, to force `dcons` to be the high-level console, add `hw.firewire."
+"dcons_crom.force_console=1` to [.filename]#loader.conf#."
msgstr ""
"Это необязательно: чтобы принудительно сделать `dcons` высокоуровневой "
-"консолью, добавьте `hw.firewire.dcons_crom.force_console=1` в "
-"[.filename]#loader.conf#."
+"консолью, добавьте `hw.firewire.dcons_crom.force_console=1` в [."
+"filename]#loader.conf#."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:708
@@ -1652,8 +1651,8 @@ msgstr "# cd /sys/boot/i386 && make clean && make && make install\n"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:717
msgid ""
-"To enable man:dcons[4] as an active low-level console, add "
-"`boot_multicons=\"YES\"` to [.filename]#/boot/loader.conf#."
+"To enable man:dcons[4] as an active low-level console, add `boot_multicons="
+"\"YES\"` to [.filename]#/boot/loader.conf#."
msgstr ""
"Чтобы включить man:dcons[4] в качестве активной низкоуровневой консоли, "
"добавьте `boot_multicons=\"YES\"` в [.filename]#/boot/loader.conf#."
@@ -1750,8 +1749,8 @@ msgstr "# dconschat -e \\# -br -G 12345 -t 00-11-22-33-44-55-66-77\n"
msgid ""
"The following key combinations can be used once man:dconschat[8] is running:"
msgstr ""
-"Следующие комбинации клавиш могут быть использованы после запуска "
-"man:dconschat[8]:"
+"Следующие комбинации клавиш могут быть использованы после запуска man:"
+"dconschat[8]:"
#. type: Table
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:767
@@ -1840,8 +1839,8 @@ msgid ""
"There exists a GDB mode for man:emacs[1]; this is what you will need to add "
"to your [.filename]#.emacs#:"
msgstr ""
-"Существует режим GDB для man:emacs[1]; вот что нужно добавить в ваш "
-"[.filename]#.emacs#:"
+"Существует режим GDB для man:emacs[1]; вот что нужно добавить в ваш [."
+"filename]#.emacs#:"
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:806
@@ -1954,9 +1953,9 @@ msgstr ""
#. type: Plain text
#: documentation/content/en/books/developers-handbook/kerneldebug/_index.adoc:846
msgid ""
-"`options KDB_UNATTENDED`: change the default value of the "
-"`debug.debugger_on_panic` sysctl to 0, which controls whether the debugger "
-"is entered on panic. When `options KDB` is not compiled into the kernel, the "
+"`options KDB_UNATTENDED`: change the default value of the `debug."
+"debugger_on_panic` sysctl to 0, which controls whether the debugger is "
+"entered on panic. When `options KDB` is not compiled into the kernel, the "
"behavior is to automatically reboot on panic; when it is compiled into the "
"kernel, the default behavior is to drop into the debugger unless `options "
"KDB_UNATTENDED` is compiled in. If you want to leave the kernel debugger "
diff --git a/documentation/content/ru/books/developers-handbook/kerneldebug/chapter.adoc b/documentation/content/ru/books/developers-handbook/kerneldebug/chapter.adoc
deleted file mode 100644
index 6e116cfec2..0000000000
--- a/documentation/content/ru/books/developers-handbook/kerneldebug/chapter.adoc
+++ /dev/null
@@ -1,678 +0,0 @@
----
-title: Глава 10. Отладка ядра
-authors:
- - author: Paul Richards
- - author: Jörg Wunsch
- - author: Robert Watson
----
-
-[[kerneldebug]]
-= Отладка ядра
-:doctype: book
-:toc: macro
-:toclevels: 1
-:icons: font
-:sectnums:
-:sectnumlevels: 6
-:sectnumoffset: 10
-:partnums:
-:source-highlighter: rouge
-:experimental:
-:images-path: books/developers-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::[]
-
-[[kerneldebug-obtain]]
-== Получение аварийного дампа ядра
-
-При работе ядра, находящегося в разработке (например: FreeBSD-CURRENT), при критичных условиях (к примеру: очень высокая средняя нагрузка, десятки тысяч соединений, исключительно большое количество одновременно работающих пользователей, сотни процессов man:jail[8] и так далее) или при использовании новой возможности в драйвере устройства в FreeBSD-STABLE (пример: PAE) оно иногда будет завершать свою работу аварийно. В случае, если это произошло, в этой главе показано, как извлекать полезную информацию из произошедшего сбоя.
-
-При аварийном завершении работы ядра перезагрузка системы неизбежна. После перезагрузки системы содержимое физической памяти системы (RAM) теряется, так же как и всё содержимое раздела подкачки перед сбоем. Для сохранения состояния физической памяти ядро использует устройство подкачки в качестве места временного хранения содержимого оперативной памяти после перезагрузки, следующей за аварийным завершением работы. С этой целью при загрузке FreeBSD после аварийного останова образ ядра может быть извлечён и применяться для отладки.
-
-[NOTE]
-====
-Устройство подкачки, которое было отконфигурировано в качестве устройства для дампа продолжает выступать в роли устройства подкачки. В настоящее время выполнение дампов на устройства, не предназначенные для организации подкачки (например, ленты или CDRW), не поддерживается. Понятие "устройство подкачки" является синонимом "раздела подкачки."
-====
-
-Чтобы суметь извлечь образ, который можно использовать, требуется, чтобы по крайней мере один раздел подкачки был достаточно большим, чтобы разместить на нём весь объём физической памяти. Когда ядро аварийно завершает работу, перед перезагрузкой системы, ядро достаточно умно, чтобы проверить, было ли отконфигурировано устройство подкачки в качестве устройства для хранения дампов. Если оно является устройством, подходящим для сброса дампа, то ядро сбрасывает содержимое физической памяти на устройство подкачки.
-
-[[config-dumpdev]]
-=== Конфигурация устройства хранения дампов
-
-До того, как ядро начнёт сбрасывать содержимое физической памяти на устройство хранения дампов, последнее должно быть отконфигурировано. Устройство хранения дампов задаётся при помощи команды man:dumpon[8], указывающей ядру, куда сохранять аварийные дампы ядра. Программа man:dumpon[8] должна быть вызвана после конфигурации раздела подкачки по команде man:swapon[8]. Обычно это осуществляется установкой переменной `dumpdev` в файле man:rc.conf[5] в значение, соответствующее пути к устройству подкачки (рекомендованный способ извлечения дампа ядра).
-
-Либо устройство для сброса образа памяти может быть задано явно в параметре `dump` строки man:config[5] конфигурационного файла вашего ядра. Такой способ использовать не рекомендуется и он должен использоваться, только если ядро аварийно завершает свою работу до того, как можно было бы запустить man:dumpon[8].
-
-[TIP]
-====
-
-Проверьте содержимое файла [.filename]#/etc/fstab# или выдачу man:swapinfo[8] на предмет наличия устройств подкачки.
-====
-
-[IMPORTANT]
-====
-Удостоверьтесь, что каталог `dumpdir`, указанный в man:rc.conf[5], существует до аварийного останова ядра!
-
-[source,shell]
-....
-# mkdir /var/crash
-# chmod 700 /var/crash
-....
-
-Запомните также, что содержимое [.filename]#/var/crash# является важной информацией, весьма вероятно, содержащей конфиденциальную информацию, в частности, пароли.
-====
-
-[[extract-dump]]
-=== Извлечение дампа ядра
-
-После того, как аварийный образ был записан на соответствующее устройство, его нужно извлечь до момента монтирования устройства подкачки. Для извлечения дампа из устройства его сохранения, воспользуйтесь утилитой man:savecore[8]. Если в файле man:rc.conf[5] было задано устройство `dumpdev`, то man:savecore[8] будет запущена автоматически при первой после аварийного останова загрузке в многопользовательском режиме и до монтирования устройства подкачки. Местоположение извлечённого образа памяти определяется значением переменной `dumpdir` из файла man:rc.conf[5], которое по умолчанию указывает на каталог [.filename]#/var/crash#, а файл будет называться [.filename]#vmcore.0#.
-
-В случае, если в каталоге [.filename]#/var/crash# (или в том, на который указывает `dumpdir`) уже существует файл с именем [.filename]#vmcore.0#, то ядро будет увеличивать порядковый номер для каждого аварийного останова, чтобы избежать перезаписи существующих файлов [.filename]#vmcore# (к примеру, [.filename]#vmcore.1#). В процессе отладки скорее всего, в качестве нужного [.filename]#vmcore# вы будете использовать версию [.filename]#vmcore# с наибольшим номером в [.filename]#/var/crash#.
-
-[TIP]
-====
-
-Если вы тестируете новое ядро, но вам нужно загрузить и работать с другим ядром, чтобы получить нормально функционирующую систему, то загрузите его в однопользовательском режиме при помощи флага `-s`, указываемого при загрузке, а затем выполните такие шаги:
-
-[source,shell]
-....
-# fsck -p
-# mount -a -t ufs
-# доступность /var/crash для записи
-# savecore /var/crash /dev/ad0s1b
-# exit
-....
-
-Эти команды указывают man:savecore[8] извлечь дамп ядра из устройства [.filename]#/dev/ad0s1b# и поместить его содержимое в каталог [.filename]#/var/crash#. Не забудьте проверить, что в целевом каталоге [.filename]#/var/crash# достаточно места для хранения дампа. Кроме того, не забудьте проверить правильность маршрута к вашему устройству подкачки, так как он, скорее всего, отличается от [.filename]#/dev/ad0s1b#!
-====
-
-Рекомендуемым и определённо самым простым способом автоматизации формирования аварийных образов является указание переменной `dumpdev` в файле man:rc.conf[5].
-
-[[kerneldebug-gdb]]
-== Отладка аварийного образа памяти ядра при помощи `kgdb`
-
-[NOTE]
-====
-В этом разделе описывается утилита man:kgdb[1], поставляемая с FreeBSD 5.3 и более поздними версиями. В предыдущих версиях для чтения файла аварийного дампа ядра необходимо использовать команду `gdb -k`.
-====
-
-После извлечения дампа памяти получение из него полезной информации для решения простых проблем является сравнительно лёгкой задачей. Перед тем, как погрузиться во внутренний интерфейс man:kgdb[1] для отладки аварийного образа памяти, найдите отладочную версию вашего ядра (обычно она имеет название [.filename]#kernel.debug#) и выясните маршрут к файлам исходных текстов, использованных для построения вашего ядра (обычно это [.filename]#/usr/obj/usr/src/sys/KERNCONF#), где в качестве _KERNCONF_ выступает значение `ident`, указанное конфигуратору ядра man:config[5]). Имея на руках эти два параметра, начнём отладку!
-
-Чтобы войти в отладчик и начать получать информацию из дампа, как минимум необходимо сделать следующие шаги:
-
-[source,shell]
-....
-# cd /usr/obj/usr/src/sys/KERNCONF
-# kgdb kernel.debug /var/crash/vmcore.0
-....
-
-Вы можете отлаживать аварийный дамп, используя исходные тексты ядра точно также, как вы это делаете с любой другой программой.
-
-Этот первый дамп взят из ядра 5.2-BETA, а сбой произошёл где-то глубоко внутри ядра. Нижеследующая выдача была модифицирована, в неё слева добавлены номера строк. При первой трассировке проверяется указатель команд и выдаётся обратная трассировка. Адрес, используемый в строке 41 для команды `list`, является указателем команд и он может быть найден в строке 17. Большинство разработчиков будут требовать предоставления им по крайней мере этой информации, если вы не можете отследить проблему самостоятельно. Если, однако, вы решите проблему, то обязательно добейтесь включения вашего патча в дерево исходных текстов, прислав его через сообщение об ошибке, списки рассылки или даже его непосредственным коммитом!
-
-[source,shell]
-....
-1:# cd /usr/obj/usr/src/sys/KERNCONF
- 2:# kgdb kernel.debug /var/crash/vmcore.0
- 3:GNU gdb 5.2.1 (FreeBSD)
- 4:Copyright 2002 Free Software Foundation, Inc.
- 5:GDB is free software, covered by the GNU General Public License, and you are
- 6:welcome to change it and/or distribute copies of it under certain conditions.
- 7:Type "show copying" to see the conditions.
- 8:There is absolutely no warranty for GDB. Type "show warranty" for details.
- 9:This GDB was configured as "i386-undermydesk-freebsd"...
-10:panic: page fault
-11:panic messages:
-12:---
-13:Fatal trap 12: page fault while in kernel mode
-14:cpuid = 0; apic id = 00
-15:fault virtual address = 0x300
-16:fault code: = supervisor read, page not present
-17:instruction pointer = 0x8:0xc0713860
-18:stack pointer = 0x10:0xdc1d0b70
-19:frame pointer = 0x10:0xdc1d0b7c
-20:code segment = base 0x0, limit 0xfffff, type 0x1b
-21: = DPL 0, pres 1, def32 1, gran 1
-22:processor eflags = resume, IOPL = 0
-23:current process = 14394 (uname)
-24:trap number = 12
-25:panic: page fault
-26 cpuid = 0;
-27:Stack backtrace:
-28
-29:syncing disks, buffers remaining... 2199 2199 panic: mi_switch: switch in a critical section
-30:cpuid = 0;
-31:Uptime: 2h43m19s
-32:Dumping 255 MB
-33: 16 32 48 64 80 96 112 128 144 160 176 192 208 224 240
-34:---
-35:Reading symbols from /boot/kernel/snd_maestro3.ko...done.
-36:Loaded symbols for /boot/kernel/snd_maestro3.ko
-37:Reading symbols from /boot/kernel/snd_pcm.ko...done.
-38:Loaded symbols for /boot/kernel/snd_pcm.ko
-39:#0 doadump () at /usr/src/sys/kern/kern_shutdown.c:240
-40:240 dumping++;
-41:(kgdb) list *0xc0713860
-42:0xc0713860 is in lapic_ipi_wait (/usr/src/sys/i386/i386/local_apic.c:663).
-43:658 incr = 0;
-44:659 delay = 1;
-45:660 } else
-46:661 incr = 1;
-47:662 for (x = 0; x < delay; x += incr) {
-48:663 if ((lapic->icr_lo & APIC_DELSTAT_MASK) == APIC_DELSTAT_IDLE)
-49:664 return (1);
-50:665 ia32_pause();
-51:666 }
-52:667 return (0);
-53:(kgdb) backtrace
-54:#0 doadump () at /usr/src/sys/kern/kern_shutdown.c:240
-55:#1 0xc055fd9b in boot (howto=260) at /usr/src/sys/kern/kern_shutdown.c:372
-56:#2 0xc056019d in panic () at /usr/src/sys/kern/kern_shutdown.c:550
-57:#3 0xc0567ef5 in mi_switch () at /usr/src/sys/kern/kern_synch.c:470
-58:#4 0xc055fa87 in boot (howto=256) at /usr/src/sys/kern/kern_shutdown.c:312
-59:#5 0xc056019d in panic () at /usr/src/sys/kern/kern_shutdown.c:550
-60:#6 0xc0720c66 in trap_fatal (frame=0xdc1d0b30, eva=0)
-61: at /usr/src/sys/i386/i386/trap.c:821
-62:#7 0xc07202b3 in trap (frame=
-63: {tf_fs = -1065484264, tf_es = -1065484272, tf_ds = -1065484272, tf_edi = 1, tf_esi = 0, tf_ebp = -602076292, tf_isp = -602076324, tf_ebx = 0, tf_edx = 0, tf_ecx = 1000000, tf_eax = 243, tf_trapno = 12, tf_err = 0, tf_eip = -1066321824, tf_cs = 8, tf_eflags = 65671, tf_esp = 243, tf_ss = 0})
-64: at /usr/src/sys/i386/i386/trap.c:250
-65:#8 0xc070c9f8 in calltrap () at {standard input}:94
-66:#9 0xc07139f3 in lapic_ipi_vectored (vector=0, dest=0)
-67: at /usr/src/sys/i386/i386/local_apic.c:733
-68:#10 0xc0718b23 in ipi_selected (cpus=1, ipi=1)
-69: at /usr/src/sys/i386/i386/mp_machdep.c:1115
-70:#11 0xc057473e in kseq_notify (ke=0xcc05e360, cpu=0)
-71: at /usr/src/sys/kern/sched_ule.c:520
-72:#12 0xc0575cad in sched_add (td=0xcbcf5c80)
-73: at /usr/src/sys/kern/sched_ule.c:1366
-74:#13 0xc05666c6 in setrunqueue (td=0xcc05e360)
-75: at /usr/src/sys/kern/kern_switch.c:422
-76:#14 0xc05752f4 in sched_wakeup (td=0xcbcf5c80)
-77: at /usr/src/sys/kern/sched_ule.c:999
-78:#15 0xc056816c in setrunnable (td=0xcbcf5c80)
-79: at /usr/src/sys/kern/kern_synch.c:570
-80:#16 0xc0567d53 in wakeup (ident=0xcbcf5c80)
-81: at /usr/src/sys/kern/kern_synch.c:411
-82:#17 0xc05490a8 in exit1 (td=0xcbcf5b40, rv=0)
-83: at /usr/src/sys/kern/kern_exit.c:509
-84:#18 0xc0548011 in sys_exit () at /usr/src/sys/kern/kern_exit.c:102
-85:#19 0xc0720fd0 in syscall (frame=
-86: {tf_fs = 47, tf_es = 47, tf_ds = 47, tf_edi = 0, tf_esi = -1, tf_ebp = -1077940712, tf_isp = -602075788, tf_ebx = 672411944, tf_edx = 10, tf_ecx = 672411600, tf_eax = 1, tf_trapno = 12, tf_err = 2, tf_eip = 671899563, tf_cs = 31, tf_eflags = 642, tf_esp = -1077940740, tf_ss = 47})
-87: at /usr/src/sys/i386/i386/trap.c:1010
-88:#20 0xc070ca4d in Xint0x80_syscall () at {standard input}:136
-89:---Can't read userspace from dump, or kernel process---
-90:(kgdb) quit
-....
-
-Во второй трассировке используется более старый дамп из времён FreeBSD 2, но он более сложный и показывает больше возможностей `gdb`. Длинные строки были усечены ради повышения читабельности, а также пронумерованы для того, чтобы ссылаться на них. Кроме этих отличий, это реальная трассировка ошибки, выполненная в процессе разработки консольного драйвера pcvt.
-
-[source,shell]
-....
-1:Script started on Fri Dec 30 23:15:22 1994
- 2:# cd /sys/compile/URIAH
- 3:# gdb -k kernel /var/crash/vmcore.1
- 4:Reading symbol data from /usr/src/sys/compile/URIAH/kernel
-...done.
- 5:IdlePTD 1f3000
- 6:panic: because you said to!
- 7:current pcb at 1e3f70
- 8:Reading in symbols for ../../i386/i386/machdep.c...done.
- 9:(kgdb) backtrace
-10:#0 boot (arghowto=256) (../../i386/i386/machdep.c line 767)
-11:#1 0xf0115159 in panic ()
-12:#2 0xf01955bd in diediedie () (../../i386/i386/machdep.c line 698)
-13:#3 0xf010185e in db_fncall ()
-14:#4 0xf0101586 in db_command (-266509132, -266509516, -267381073)
-15:#5 0xf0101711 in db_command_loop ()
-16:#6 0xf01040a0 in db_trap ()
-17:#7 0xf0192976 in kdb_trap (12, 0, -272630436, -266743723)
-18:#8 0xf019d2eb in trap_fatal (...)
-19:#9 0xf019ce60 in trap_pfault (...)
-20:#10 0xf019cb2f in trap (...)
-21:#11 0xf01932a1 in exception:calltrap ()
-22:#12 0xf0191503 in cnopen (...)
-23:#13 0xf0132c34 in spec_open ()
-24:#14 0xf012d014 in vn_open ()
-25:#15 0xf012a183 in open ()
-26:#16 0xf019d4eb in syscall (...)
-27:(kgdb) up 10
-28:Reading in symbols for ../../i386/i386/trap.c...done.
-29:#10 0xf019cb2f in trap (frame={tf_es = -260440048, tf_ds = 16, tf_\
-30:edi = 3072, tf_esi = -266445372, tf_ebp = -272630356, tf_isp = -27\
-31:2630396, tf_ebx = -266427884, tf_edx = 12, tf_ecx = -266427884, tf\
-32:_eax = 64772224, tf_trapno = 12, tf_err = -272695296, tf_eip = -26\
-33:6672343, tf_cs = -266469368, tf_eflags = 66066, tf_esp = 3072, tf_\
-34:ss = -266427884}) (../../i386/i386/trap.c line 283)
-35:283 (void) trap_pfault(&frame, FALSE);
-36:(kgdb) frame frame-<tf_ebp frame-<tf_eip
-37:Reading in symbols for ../../i386/isa/pcvt/pcvt_drv.c...done.
-38:#0 0xf01ae729 in pcopen (dev=3072, flag=3, mode=8192, p=(struct p\
-39:roc *) 0xf07c0c00) (../../i386/isa/pcvt/pcvt_drv.c line 403)
-40:403 return ((*linesw[tp-<t_line].l_open)(dev, tp));
-41:(kgdb) list
-42:398
-43:399 tp-<t_state |= TS_CARR_ON;
-44:400 tp-<t_cflag |= CLOCAL; /* cannot be a modem (:-) */
-45:401
-46:402 #if PCVT_NETBSD || (PCVT_FREEBSD >= 200)
-47:403 return ((*linesw[tp-<t_line].l_open)(dev, tp));
-48:404 #else
-49:405 return ((*linesw[tp-<t_line].l_open)(dev, tp, flag));
-50:406 #endif /* PCVT_NETBSD || (PCVT_FREEBSD >= 200) */
-51:407 }
-52:(kgdb) print tp
-53:Reading in symbols for ../../i386/i386/cons.c...done.
-54:$1 = (struct tty *) 0x1bae
-55:(kgdb) print tp-<t_line
-56:$2 = 1767990816
-57:(kgdb) up
-58:#1 0xf0191503 in cnopen (dev=0x00000000, flag=3, mode=8192, p=(st\
-59:ruct proc *) 0xf07c0c00) (../../i386/i386/cons.c line 126)
-60: return ((*cdevsw[major(dev)].d_open)(dev, flag, mode, p));
-61:(kgdb) up
-62:#2 0xf0132c34 in spec_open ()
-63:(kgdb) up
-64:#3 0xf012d014 in vn_open ()
-65:(kgdb) up
-66:#4 0xf012a183 in open ()
-67:(kgdb) up
-68:#5 0xf019d4eb in syscall (frame={tf_es = 39, tf_ds = 39, tf_edi =\
-69: 2158592, tf_esi = 0, tf_ebp = -272638436, tf_isp = -272629788, tf\
-70:_ebx = 7086, tf_edx = 1, tf_ecx = 0, tf_eax = 5, tf_trapno = 582, \
-71:tf_err = 582, tf_eip = 75749, tf_cs = 31, tf_eflags = 582, tf_esp \
-72:= -272638456, tf_ss = 39}) (../../i386/i386/trap.c line 673)
-73:673 error = (*callp-<sy_call)(p, args, rval);
-74:(kgdb) up
-75:Initial frame selected; you cannot go up.
-76:(kgdb) quit
-....
-
-Комментарии к вышеприведенному журналу:
-
-строка 6:::
-Это дамп, взятый при помощи DDB (смотри ниже), поэтому комментарий к аварийному останову имеет именно вид "because you said to!" и трассировка стека глубока; однако изначальной причиной перехода в DDB была аварийная остановка при возникновению ошибки страницы памяти.
-
-строка 20:::
-Это местонахождение функции `trap()` в трассировке стека.
-
-строка 36:::
-Принудительное использование новой границы стека; теперь это не нужно. Предполагается, что границы стека указывают на правильное расположение, даже в случае аварийного останова. Глядя на строку исходного кода 403, можно сказать, что весьма вероятно, что либо виноват доступ по указателю "tp", либо был выход за границы массива.
-
-строка 52:::
-Похоже, что виноват указатель, но он является допустимым адресом.
-
-строка 56:::
-Однако, очевидно, что он указывает на мусор, так что мы нашли нашу ошибку! (Для тех, кто не знаком с этой частью кода: `tp->t_line` служит для хранения режима канала консольного устройства, и это должно быть достаточно маленькое целое число.)
-
-[TIP]
-====
-
-Если в вашей системе регулярно происходят аварийные остановы, и вам не хватает места на диске, удаление старых файлов [.filename]#vmcore# в каталоге [.filename]#/var/crash# может сэкономить вам значительный объём дискового пространства!
-====
-
-[[kerneldebug-ddd]]
-== Отладка аварийного дампа с помощью DDD
-
-Возможно также и исследование аварийного дампа ядра при помощи такого графического отладчика, как `ddd` (вам потребуется установить порт [.filename]#devel/ddd#, чтобы использовать отладчик `ddd`). Добавьте флаг `-k` к командной строке `ddd`, которую вы обычно используете для его вызова. Например;
-
-[source,shell]
-....
-# ddd -k /var/crash/kernel.0 /var/crash/vmcore.0
-....
-
-После этого у вас должно получиться исследование аварийного дампа при помощи графического интерфейса `ddd`.
-
-[[kerneldebug-post-mortem]]
-== Посмертный анализ дампа
-
-Что делать, если ядро аварийно завершает работу, хотя этого вы не хотели и поэтому командой `config -g` его не компилировали? Здесь не всё ещё потеряно. Не паникуйте!
-
-Конечно, вам нужно включить создание аварийных дампов. Смотрите выше, что вы должны для этого сделать.
-
-Перейдите в каталог конфигурации ядра ([.filename]#/usr/src/sys/arch/conf#) и отредактируйте ваш конфигурационный файл. Раскомментируйте (или добавьте, если она не существует) такую строку:
-
-[.programlisting]
-....
-makeoptions DEBUG=-g #Build kernel with gdb(1) debug symbols
-....
-
-Перестройте ядро. Из-за изменения метки времени в Makefile будут перестроены и некоторые другие объектные файлы, например, [.filename]#trap.o#. К некоторому счастью, добавление опции `-g` не изменит все и вся в генерируемом коде, так что в конце концов вы получите новое ядро с тем же кодом, что и сбоящее ядро, но с отладочной информацией. По крайней мере, вы можете сравнить старый и новый размеры ядер командой man:size[1]. Если они не совпадают, то вам придется отказаться от вашей затеи.
-
-Исследуйте дамп так, как это описано выше. Отладочной информации может не хватать в некоторых местах, как это можно видеть в трассировке стека примера выше, когда некоторые функции выводятся без номеров строк и списка аргументов. Если вам нужно больше отладочной информации, удалите соответствующие объектные файлы, снова перекомпилируйте ядро и повторите сеанс работы `gdb -k`, пока не получите достаточно подробную информацию.
-
-Не гарантируется, что всё это будет работать, однако в большинстве случаев всё работает прекрасно.
-
-[[kerneldebug-online-ddb]]
-== Отладка ядра в режиме реального времени с помощью DDB
-
-Хотя `gdb -k` является отладчиком не реального времени с высокоуровневым пользовательским интерфейсом, есть несколько вещей, которые он сделать не сможет. Самыми важными из них являются точки останова и пошаговое выполнение кода ядра.
-
-Если вам нужно выполнять низкоуровневую отладку вашего ядра, то на этот случай имеется отладчик реального времени, который называется DDB. Он позволяет устанавливать точки останова, выполнять функции ядра по шагам, исследовать и изменять переменные ядра и прочее. Однако он не может использовать исходные тексты ядра и имеет доступ только к глобальным и статическим символам, а не ко всей отладочной информации, как в `gdb`.
-
-Чтобы отконфигурировать ваше ядро для включения DDB, добавьте строчку с параметром
-
-[.programlisting]
-....
-options DDB
-....
-
-в ваш конфигурационный файл, и перестройте ядро. (Обратитесь к extref:{handbook}[Руководству по FreeBSD] для выяснения подробностей о конфигурации ядра FreeBSD).
-
-[NOTE]
-====
-Если у вас устаревшая версия загрузочных блоков, то отладочная информация может оказаться не загруженной. Обновите блоки загрузки; самые новые загружают символы для DDB автоматически.
-====
-
-После того, как ядро с DDB запущено, есть несколько способов войти в DDB. Первый, и самый простой, способ заключается в наборе флага загрузки `-d` прямо в приглашении загрузчика. Ядро будет запущено в режиме отладки и войдет в DDB до выполнения процедуры распознавания каких бы то ни было устройств. Поэтому вы можете выполнить отладку даже функций распознавания/присоединения устройств.
-
-Вторым способом является переход в режим отладчика сразу после загрузки системы. Есть два простых способа этого добиться. Если вы хотите перейти в отладчик из командной строки, просто наберите команду:
-
-[source,shell]
-....
-# sysctl debug.enter_debugger=ddb
-....
-
-Либо, если вы работаете за системной консолью, можете воспользоваться определенной комбинацией клавиш. По умолчанию для перехода в отладчик используется комбинация kbd:[Ctrl+Alt+ESC]. Для драйвера syscons эта последовательность может быть изменена, и в некоторых распространяемых раскладках это сделано, так что обязательно выясните правильную комбинацию. Для последовательных консолей имеется параметр, позволяющий использовать последовательность BREAK на канале консоли для входа в DDB (`options BREAK_TO_DEBUGGER` в конфигурационном файле ядра). По умолчанию этого не делается, так как существует множество последовательных адаптеров, которые ошибочно генерируют последовательность BREAK, к примеру, при отключении кабеля.
-
-Третий способ заключается во входе в DDB при возникновении любой аварийной ситуации, если ядро его использует. По этой причине не очень умно конфигурировать ядро с DDB для машины, которая работает без присмотра.
-
-Команды DDB примерно повторяют некоторые команды `gdb`. Первым делом вам, наверное, нужно задать точку останова:
-
-[source,shell]
-....
- b function-name
- b address
-....
-
-Значения по умолчанию воспринимаются в шестнадцатеричном виде, но чтобы отличать их от имен символов; шестнадцатеричные числа, начинающиеся с букв `a-f`, должны предваряться символами `0x` (это опционально для других чисел). Разрешены простые выражения, например: `function-name + 0x103`.
-
-Чтобы продолжить работу прерванного ядра, просто наберите:
-
-[source,shell]
-....
- c
-....
-
-Чтобы получить трассировку стека, задайте:
-
-[source,shell]
-....
- trace
-....
-
-[NOTE]
-====
-Заметьте, что при входе в DDB по специальной комбинации, ядро в данный момент обслуживает прерывание, так что трассировка стека может не дать вам много информации.
-====
-
-Если вы хотите убрать точку останова, введите
-
-[source,shell]
-....
- del
- del address-expression
-....
-
-В первом варианте команда будет исполнена сразу же по достижении точки останова, а текущая точка останова будет удалена. Во второй форме можно удалить любую точку останова, однако вам нужно будет указать ее точный адрес; его можно получить из:
-
-[source,shell]
-....
- show b
-....
-
-Чтобы выполнить один шаг ядра, попробуйте:
-
-[source,shell]
-....
- s
-....
-
-При этом будет осуществляться пошаговое выполнение функций, однако вы можете трассировать их с помощью DDB, пока не будет достигнуто соответствие возвращаемому значению:
-
-[source,shell]
-....
- n
-....
-
-[NOTE]
-====
-Это отличается от команды `next` отладчика `gdb`; это похоже на команду `gdb finish`.
-====
-
-Чтобы выводить значения в памяти, используйте, (к примеру):
-
-[source,shell]
-....
- x/wx 0xf0133fe0,40
- x/hd db_symtab_space
- x/bc termbuf,10
- x/s stringbuf
-....
-
-для доступа к данным типа слово/полуслово/байт и вывода в шестнадцатеричном/десятичном/символьном виде. Число после запятой означает счетчик объектов. Чтобы вывести следующие 0x10 объектов, просто укажите:
-
-[source,shell]
-....
- x ,10
-....
-
-Подобным же образом используйте
-
-[source,shell]
-....
- x/ia foofunc,10
-....
-
-для дизассемблирования и вывода первых 0x10 инструкций функции `foofunc` вместе с их адресом относительно начала `foofunc`.
-
-Чтобы изменить значения в памяти, используйте команду write:
-
-[source,shell]
-....
- w/b termbuf 0xa 0xb 0
- w/w 0xf0010030 0 0
-....
-
-Модификатор команды (`b`/`h`/`w`) указывает на размер записываемых данных, первое следующее за ним выражение является адресом для записи, а оставшаяся часть интерпретируется как данные для записи в доступные области памяти.
-
-Если вам нужно узнать текущее содержимое регистров, используйте:
-
-[source,shell]
-....
- show reg
-....
-
-Альтернативно вы можете вывести содержимое одного регистра по команде, скажем,
-
-[source,shell]
-....
- p $eax
-....
-
-и изменить его по:
-
-[source,shell]
-....
- set $eax new-value
-....
-
-Если вам нужно вызвать некоторую функцию ядра из DDB, просто укажите:
-
-[source,shell]
-....
- call func(arg1, arg2, ...)
-....
-
-Будет выведено возвращаемое значение.
-
-Для вывода суммарной статистики по всем работающим процессам в стиле команды man:ps[1] воспользуйтесь такой командой:
-
-[source,shell]
-....
- ps
-....
-
-Теперь вы узнали, почему ядро работает с ошибками и хотите выполнить перезагрузку. Запомните, что в зависимости от влияния предыдущих ошибок, не все части ядра могут работать так, как ожидается. Выполните одно из следующих действий для закрытия и перезагрузки вашей системы:
-
-[source,shell]
-....
- panic
-....
-
-Это приведет к созданию дампа ядра и перезагрузке, так что позже вы можете проанализировать дамп на более высоком уровне при помощи `gdb`. Как правило, эта команда должна следовать за другой командой `continue`.
-
-[source,shell]
-....
- call boot(0)
-....
-
-Это может оказаться хорошим способом для корректного закрытия работающей системы, `sync()` для всех дисков и напоследок перезагрузка. Пока интерфейсы диска и файловой системы в ядре не повреждены, это может быть самым правильным способом закрытия системы.
-
-[source,shell]
-....
- call cpu_reset()
-....
-
-Это последнее средство при аварии и практически то же самое, что нажатие Большой Красной Кнопки.
-
-Если вам нужен краткий справочник по командам, просто наберите:
-
-[source,shell]
-....
- help
-....
-
-Однако настоятельно рекомендуем отпечатать копию страницы справочника по man:ddb[4] при подготовке к сеансу отладки. Помните, что трудно читать онлайновое руководство при пошаговом выполнении ядра.
-
-[[kerneldebug-online-gdb]]
-== Отладка ядра в режиме реального времени при помощи удалённого GDB
-
-Эта возможность поддерживается во FreeBSD начиная с версии 2.2, и она на самом деле очень удобна.
-
-В GDB уже давно имеется поддержка _удаленной отладки_. Это делается при помощи весьма простого протокола по последовательному каналу. В отличие от других методов, описанных выше, для этого вам требуется наличие двух машин. Одна из них является хостом, предоставляющим ресурсы для отладки, включая все исходные тексты и копию ядра со всеми символами в нем, а другая является целевой машиной, на которой запущена та же копия того же ядра (но без отладочной информации).
-
-Вы должны настроить исследуемое ядро при помощи команды `config -g`, включить `DDB` в конфигурацию и откомпилировать его обычным образом. Это даст большой бинарный файл из-за отладочной информации. Скопируйте это ядро на целевую машину, усеките отладочную информацию командой `strip -x` и загрузите это ядро с использованием параметра загрузки `-d`. Подключите последовательный канал целевой машины, имеющий установленные флаги "flags 080" на соответствующем устройстве sio к любому последовательному каналу отладочного хоста. А теперь на отладочной машине перейдите в каталог компиляции целевого ядра и запустите `gdb`:
-
-[source,shell]
-....
-% gdb -k kernel
-GDB is free software and you are welcome to distribute copies of it
- under certain conditions; type "show copying" to see the conditions.
-There is absolutely no warranty for GDB; type "show warranty" for details.
-GDB 4.16 (i386-unknown-freebsd),
-Copyright 1996 Free Software Foundation, Inc...
-(kgdb)
-....
-
-Проинициализируйте сеанс удаленной отладки (предполагается, что используется первый последовательный порт) такой командой:
-
-[source,shell]
-....
-(kgdb) target remote /dev/cuaa0
-....
-
-Теперь на целевом хосте (тот, который перешел в DDB даже до начала процесса обнаружения устройств) наберите:
-
-[source,shell]
-....
-Debugger("Boot flags requested debugger")
-Stopped at Debugger+0x35: movb $0, edata+0x51bc
-
-db> gdb
-....
-
-DDB ответит следующим:
-
-[source,shell]
-....
-Next trap will enter GDB remote protocol mode
-....
-
-Каждый раз, когда вы будете набирать `gdb`, режим будет меняться между удаленным GDB и локальным DDB. Чтобы немедленно вызвать следующее прерывание, просто наберите `s` (step). Ваш хостирующий GDB получит управление над целевым ядром:
-
-[source,shell]
-....
-Remote debugging using /dev/cuaa0
-Debugger (msg=0xf01b0383 "Boot flags requested debugger")
- at ../../i386/i386/db_interface.c:257
-(kgdb)
-....
-
-Вы можете работать в этом сеансе точно также, как и в любом другом сеансе GDB, включая полный доступ к исходным текстам, запуск его в режиме gud-mode внутри окна Emacs (что даёт вам автоматический вывод исходного кода в другом окне Emacs) и тому подобное.
-
-[[kerneldebug-kld]]
-== Отладка загружаемых модулей с помощью GDB
-
-При отладке аварийного останова системы, которое произошло в модуле, или при использовании GDB в режиме удаленного доступа к машине, использующей динамические модули, вам нужно указать GDB, как получить информацию о символах в этих модулях.
-
-Первым делом вам нужно построить модуль (или модули) с включением отладочной информации:
-
-[source,shell]
-....
-# cd /sys/modules/linux
-# make clean; make COPTS=-g
-....
-
-Если вы используете GDB в режиме удаленного доступа, то для определения того, куда был загружен модуль, можете запустить команду `kldstat` на целевой машине:
-
-[source,shell]
-....
-# kldstat
-Id Refs Address Size Name
- 1 4 0xc0100000 1c1678 kernel
- 2 1 0xc0a9e000 6000 linprocfs.ko
- 3 1 0xc0ad7000 2000 warp_saver.ko
- 4 1 0xc0adc000 11000 linux.ko
-....
-
-Если вы отлаживаете аварийный дамп, вам потребуется просмотреть список `linker_files` начиная с `linker_files->tqh_first` и следовать указателям `link.tqe_next` до тех пор, пока не найдете запись с тем `filename`, который вы ищете. Элемент `address` этой записи является адресом загрузки модуля.
-
-Затем вам нужно определить смещение текстового сегмента модуля:
-
-[source,shell]
-....
-# objdump --section-headers /sys/modules/linux/linux.ko | grep text
-3 .rel.text 000016e0 000038e0 000038e0 000038e0 2**2
- 10 .text 00007f34 000062d0 000062d0 000062d0 2**2
-....
-
-То, что вы ищете, является секцией `.text`, в примере выше это секция 10. Четвертое числовое поле (всего шестое по счёту) является смещением текстовой секции внутри файла. Добавьте это смещение к адресу загрузки, чтобы получить адрес, на который был перемещён код модуля. В нашем примере мы получим 0xc0adc000 + 0x62d0 = c0ae22d0. Воспользуйтесь командой `add-symbol-file` в GDB для указания отладчику на модуль:
-
-[source,shell]
-....
-(kgdb) add-symbol-file /sys/modules/linux/linux.ko 0xc0ae22d0
-add symbol table from file "/sys/modules/linux/linux.ko" at text_addr = 0xc0ae22d0?
-(y or n)
-(kgdb) y
-Reading symbols from /sys/modules/linux/linux.ko...done.
-(kgdb)
-....
-
-Теперь вы должны получить доступ ко всем символам в модуле.
-
-[[kerneldebug-console]]
-== Отладка драйвера консоли
-
-Так как для работы DDB вам требуется драйвер консоли, то в случае неисправностей самого драйвера консоли все становится гораздо сложнее. Вы можете вспомнить об использовании последовательной консоли (либо с исправленными загрузочными блоками, либо при указании флага `-h` в приглашении `Boot:`) и подключить обычный терминал к первому последовательному порту. DDB работает с любым отконфигурированным драйвером консоли, в том числе с последовательной консолью.
diff --git a/documentation/content/ru/books/developers-handbook/l10n/_index.adoc b/documentation/content/ru/books/developers-handbook/l10n/_index.adoc
index 7b21ea51f3..5d2a2c57ce 100644
--- a/documentation/content/ru/books/developers-handbook/l10n/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/l10n/_index.adoc
@@ -1,11 +1,11 @@
---
-authors:
+authors: ~
description: 'Локализация и интернационализация - L10N и I18N в FreeBSD'
next: books/developers-handbook/policies
params:
path: /books/developers-handbook/l10n/
prev: books/developers-handbook/secure
-showBookMenu: true
+showBookMenu: 'true'
tags: ["L10N", "I18N", "Localization", "Internationalization", "FreeBSD"]
title: 'Глава 4. Локализация и интернационализация - L10N и I18N'
weight: 5
diff --git a/documentation/content/ru/books/developers-handbook/l10n/_index.po b/documentation/content/ru/books/developers-handbook/l10n/_index.po
index 3a8d1dfcbc..8edbf7ad44 100644
--- a/documentation/content/ru/books/developers-handbook/l10n/_index.po
+++ b/documentation/content/ru/books/developers-handbook/l10n/_index.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
"PO-Revision-Date: 2025-06-24 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
@@ -18,13 +18,13 @@ msgstr ""
"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
+#. type: YAML Front Matter: description
#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:1
#, no-wrap
msgid "Localization and Internationalization - L10N and I18N in FreeBSD"
msgstr "Локализация и интернационализация - L10N и I18N в FreeBSD"
-#. type: Yaml Front Matter Hash Value: title
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:1
#, no-wrap
msgid "Chapter 4. Localization and Internationalization - L10N and I18N"
@@ -138,7 +138,9 @@ msgstr ""
#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:83
#, no-wrap
msgid "Localized Messages with POSIX.1 Native Language Support (NLS)"
-msgstr "Локализованные сообщения с поддержкой родного языка POSIX.1 (NLS — Native Language Support)"
+msgstr ""
+"Локализованные сообщения с поддержкой родного языка POSIX.1 (NLS — Native "
+"Language Support)"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:87
@@ -217,7 +219,9 @@ msgstr ""
#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:112
#, no-wrap
msgid "15 \"File not found: %s\\n\"\n"
-msgstr "15 \"File not found: %s\\n\"\n"
+msgstr ""
+"15 \"File not found: %s\\n"
+"\"\n"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:118
@@ -546,8 +550,8 @@ msgstr ""
"переводчиков при локализации программы, а пользователи увидят стандартное "
"сообщение об ошибке \"Not a directory\" при возникновении данной ошибки. Это "
"сообщение, вероятно, будет выглядеть более привычным для них. Обратите "
-"внимание, что для прямого доступа к `errno` потребовалось включить "
-"[.filename]#errno.h#."
+"внимание, что для прямого доступа к `errno` потребовалось включить [."
+"filename]#errno.h#."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:236
@@ -593,8 +597,8 @@ msgstr ""
"как компиляция каталогов и их установка в нужное место. Чтобы ещё больше "
"упростить этот процесс, [.filename]#bsd.nls.mk# вводит некоторые макросы. "
"Нет необходимости явно включать [.filename]#bsd.nls.mk#, он подключается "
-"автоматически из общих Makefiles, таких как [.filename]#bsd.prog.mk# или "
-"[.filename]#bsd.lib.mk#."
+"автоматически из общих Makefiles, таких как [.filename]#bsd.prog.mk# или [."
+"filename]#bsd.lib.mk#."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/l10n/_index.adoc:255
diff --git a/documentation/content/ru/books/developers-handbook/parti.adoc b/documentation/content/ru/books/developers-handbook/parti.adoc
index adce578cf4..d8b7390845 100644
--- a/documentation/content/ru/books/developers-handbook/parti.adoc
+++ b/documentation/content/ru/books/developers-handbook/parti.adoc
@@ -3,7 +3,7 @@ next: books/developers-handbook/introduction
params:
path: /books/developers-handbook/parti/
prev: books/developers-handbook
-showBookMenu: true
+showBookMenu: 'true'
title: 'Часть I. Основы'
weight: 1
---
diff --git a/documentation/content/ru/books/developers-handbook/parti.po b/documentation/content/ru/books/developers-handbook/parti.po
index 1b1ac9c56c..be91cc20d0 100644
--- a/documentation/content/ru/books/developers-handbook/parti.po
+++ b/documentation/content/ru/books/developers-handbook/parti.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
"PO-Revision-Date: 2025-06-22 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
@@ -18,7 +18,7 @@ msgstr ""
"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
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/parti.adoc:1
#, no-wrap
msgid "Part I. Basics"
diff --git a/documentation/content/ru/books/developers-handbook/partii.adoc b/documentation/content/ru/books/developers-handbook/partii.adoc
index 90b195599b..27181f7598 100644
--- a/documentation/content/ru/books/developers-handbook/partii.adoc
+++ b/documentation/content/ru/books/developers-handbook/partii.adoc
@@ -3,7 +3,7 @@ next: books/developers-handbook/sockets
params:
path: /books/developers-handbook/partii/
prev: books/developers-handbook/testing
-showBookMenu: true
+showBookMenu: 'true'
title: 'Часть II. Межпроцессное взаимодействие'
weight: 8
---
diff --git a/documentation/content/ru/books/developers-handbook/partii.po b/documentation/content/ru/books/developers-handbook/partii.po
index e6ef620442..8540e88f65 100644
--- a/documentation/content/ru/books/developers-handbook/partii.po
+++ b/documentation/content/ru/books/developers-handbook/partii.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
"PO-Revision-Date: 2025-06-22 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
@@ -18,7 +18,7 @@ msgstr ""
"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
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/partii.adoc:1
#, no-wrap
msgid "Part II. Interprocess Communication"
diff --git a/documentation/content/ru/books/developers-handbook/partiii.adoc b/documentation/content/ru/books/developers-handbook/partiii.adoc
index af235ae481..fcc0c006ce 100644
--- a/documentation/content/ru/books/developers-handbook/partiii.adoc
+++ b/documentation/content/ru/books/developers-handbook/partiii.adoc
@@ -3,7 +3,7 @@ next: books/developers-handbook/kernelbuild
params:
path: /books/developers-handbook/partiii/
prev: books/developers-handbook/ipv6
-showBookMenu: true
+showBookMenu: 'true'
title: 'Часть III. Ядро системы'
weight: 11
---
diff --git a/documentation/content/ru/books/developers-handbook/partiii.po b/documentation/content/ru/books/developers-handbook/partiii.po
index 784ac2476a..45ad5f5cfe 100644
--- a/documentation/content/ru/books/developers-handbook/partiii.po
+++ b/documentation/content/ru/books/developers-handbook/partiii.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
"PO-Revision-Date: 2025-06-12 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
@@ -18,7 +18,7 @@ msgstr ""
"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
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/partiii.adoc:1
#, no-wrap
msgid "Part III. Kernel"
diff --git a/documentation/content/ru/books/developers-handbook/partiv.adoc b/documentation/content/ru/books/developers-handbook/partiv.adoc
index e97b97bcaa..5ebf4f121c 100644
--- a/documentation/content/ru/books/developers-handbook/partiv.adoc
+++ b/documentation/content/ru/books/developers-handbook/partiv.adoc
@@ -3,7 +3,7 @@ next: books/developers-handbook/x86
params:
path: /books/developers-handbook/partiv/
prev: books/developers-handbook/kerneldebug
-showBookMenu: true
+showBookMenu: 'true'
title: 'Часть IV. Архитектуры'
weight: 14
---
diff --git a/documentation/content/ru/books/developers-handbook/partiv.po b/documentation/content/ru/books/developers-handbook/partiv.po
index 729cc84399..787827066d 100644
--- a/documentation/content/ru/books/developers-handbook/partiv.po
+++ b/documentation/content/ru/books/developers-handbook/partiv.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
"PO-Revision-Date: 2025-06-22 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
@@ -18,7 +18,7 @@ msgstr ""
"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
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/partiv.adoc:1
#, no-wrap
msgid "Part IV. Architectures"
diff --git a/documentation/content/ru/books/developers-handbook/partv.adoc b/documentation/content/ru/books/developers-handbook/partv.adoc
index a5f2aec1f5..dadc6c04d0 100644
--- a/documentation/content/ru/books/developers-handbook/partv.adoc
+++ b/documentation/content/ru/books/developers-handbook/partv.adoc
@@ -3,7 +3,7 @@ next: books/developers-handbook/bibliography
params:
path: /books/developers-handbook/partv/
prev: books/developers-handbook/x86
-showBookMenu: true
+showBookMenu: 'true'
title: 'Часть V. Приложения'
weight: 16
---
diff --git a/documentation/content/ru/books/developers-handbook/partv.po b/documentation/content/ru/books/developers-handbook/partv.po
index 1871f3f359..139f90dcec 100644
--- a/documentation/content/ru/books/developers-handbook/partv.po
+++ b/documentation/content/ru/books/developers-handbook/partv.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
"PO-Revision-Date: 2025-06-07 17:10+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
@@ -18,7 +18,7 @@ msgstr ""
"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
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/partv.adoc:1
#, no-wrap
msgid "Part V. Appendices"
diff --git a/documentation/content/ru/books/developers-handbook/policies/_index.adoc b/documentation/content/ru/books/developers-handbook/policies/_index.adoc
index 7264035d7e..881c669f3a 100644
--- a/documentation/content/ru/books/developers-handbook/policies/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/policies/_index.adoc
@@ -9,7 +9,7 @@ next: books/developers-handbook/testing
params:
path: /books/developers-handbook/policies/
prev: books/developers-handbook/l10n
-showBookMenu: true
+showBookMenu: 'true'
tags: ["Style Guidelines", "MAINTAINER", "Makefiles", "Contributed Software", "Shared libraries"]
title: 'Глава 5. Руководство и политика работы с деревом исходного кода'
weight: 6
diff --git a/documentation/content/ru/books/developers-handbook/policies/_index.po b/documentation/content/ru/books/developers-handbook/policies/_index.po
index a5bda85033..ba64ecaad2 100644
--- a/documentation/content/ru/books/developers-handbook/policies/_index.po
+++ b/documentation/content/ru/books/developers-handbook/policies/_index.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-06-29 21:20+0100\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/"
@@ -25,7 +25,7 @@ msgstr ""
msgid "Source Tree Guidelines and Policies"
msgstr "Руководство и политика работы с деревом исходного кода"
-#. type: Yaml Front Matter Hash Value: title
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/policies/_index.adoc:1
#, no-wrap
msgid "Chapter 5. Source Tree Guidelines and Policies"
@@ -74,10 +74,10 @@ msgid ""
"question:"
msgstr ""
"Если определённая часть дистрибутива FreeBSD [.filename]#src/# "
-"поддерживается человеком или группой лиц, это указывается в файле "
-"[.filename]#src/MAINTAINERS#. Сопровождающие портов в Коллекции портов "
-"указывают свою ответственность, добавляя строку `MAINTAINER` в "
-"[.filename]#Makefile# соответствующего порта:"
+"поддерживается человеком или группой лиц, это указывается в файле [."
+"filename]#src/MAINTAINERS#. Сопровождающие портов в Коллекции портов "
+"указывают свою ответственность, добавляя строку `MAINTAINER` в [."
+"filename]#Makefile# соответствующего порта:"
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/policies/_index.adoc:71
@@ -204,8 +204,8 @@ msgstr ""
"могут отклоняться от этой процедуры по усмотрению сопровождающего. Точные "
"шаги, необходимые для обновления конкретного программного обеспечения, "
"должны быть записаны в файле с именем `FREEBSD-upgrade`; например, "
-"link:https://cgit.freebsd.org/src/tree/contrib/libarchive/FREEBSD-"
-"upgrade[файл FREEBSD-upgrade libarchive]."
+"link:https://cgit.freebsd.org/src/tree/contrib/libarchive/FREEBSD-upgrade["
+"файл FREEBSD-upgrade libarchive]."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/policies/_index.adoc:103
@@ -214,10 +214,10 @@ msgid ""
"subdirectory of the source tree, with some exceptions. Contributed software "
"used only by the kernel lives under [.filepath]#sys/contrib/#."
msgstr ""
-"Стороннее программное обеспечение обычно размещается в подкаталоге "
-"[.filepath]#contrib/# дерева исходных кодов, за некоторыми исключениями. "
-"Стороннее программное обеспечение, используемое только ядром, находится в "
-"[.filepath]#sys/contrib/#."
+"Стороннее программное обеспечение обычно размещается в подкаталоге [."
+"filepath]#contrib/# дерева исходных кодов, за некоторыми исключениями. "
+"Стороннее программное обеспечение, используемое только ядром, находится в [."
+"filepath]#sys/contrib/#."
#. type: delimited block = 4
#: documentation/content/en/books/developers-handbook/policies/_index.adoc:107
@@ -244,8 +244,8 @@ msgid ""
"git[Committer's Guide]."
msgstr ""
"Стандартный процесс управления сторонним программным обеспечением и ветками "
-"поставщиков подробно описан в extref:{committers-guide}#vendor-import-"
-"git[Руководстве коммиттера]."
+"поставщиков подробно описан в extref:{committers-guide}#vendor-import-git["
+"Руководстве коммиттера]."
#. type: Title ==
#: documentation/content/en/books/developers-handbook/policies/_index.adoc:115
@@ -293,14 +293,14 @@ msgid ""
"not encumbered, unless (1) or (2) apply to it."
msgstr ""
"Файл, содержащий загружаемые двоичные данные для использования "
-"оборудованием, не является обремененным, если к нему не применяется пункт "
-"(1) или (2)."
+"оборудованием, не является обремененным, если к нему не применяется пункт (1)"
+" или (2)."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/policies/_index.adoc:126
msgid ""
-"Any encumbered file requires specific approval from the link:https://"
-"www.FreeBSD.org/administration/#t-core[Core Team] before it is added to the "
+"Any encumbered file requires specific approval from the link:https://www."
+"FreeBSD.org/administration/#t-core[Core Team] before it is added to the "
"repository."
msgstr ""
"Любой файл с правовыми ограничениями требует специального одобрения от "
@@ -328,8 +328,8 @@ msgstr ""
#. type: Plain text
#: documentation/content/en/books/developers-handbook/policies/_index.adoc:130
msgid ""
-"In the past binary files were typically uuencoded, and named "
-"[.filename]#arch/filename.o.uu#. This is no longer necessary, and binary "
+"In the past binary files were typically uuencoded, and named [."
+"filename]#arch/filename.o.uu#. This is no longer necessary, and binary "
"files may be added to the repository unchanged."
msgstr ""
"В прошлом бинарные файлы обычно кодировались с помощью uuencode и назывались "
@@ -503,21 +503,21 @@ msgid ""
"convention where library version is written in the form `libexample.so.x.y`, "
"where x is the major version, and y is minor. Common practice is to set the "
"library' soname (`DT_SONAME` ELF tag) to `libexample.so.x`, and set up "
-"symlinks `libexample.so.x->libexample.so.x.y`, `libexample.so-"
-">libexample.so.x` on library installation for the latest minor version y. "
-"Then, since the static linker searches for `libexample.so` when the `-"
-"lexample` command line option is specified, objects linked with libexample "
-"get a dependency on the right library. Almost all popular build systems use "
-"this scheme automatically."
+"symlinks `libexample.so.x->libexample.so.x.y`, `libexample.so->libexample.so."
+"x` on library installation for the latest minor version y. Then, since the "
+"static linker searches for `libexample.so` when the `-lexample` command line "
+"option is specified, objects linked with libexample get a dependency on the "
+"right library. Almost all popular build systems use this scheme "
+"automatically."
msgstr ""
"Динамический загрузчик ELF сопоставляет имена библиотек буквально. "
"Существует популярное соглашение, согласно которому версия библиотеки "
"записывается в виде `libexample.so.x.y`, где x — это мажорная версия, а y — "
"минорная. Общепринятой практикой является установка поля soname у библиотеки "
"(тег ELF `DT_SONAME`) в `libexample.so.x`, а также создание символических "
-"ссылок `libexample.so.x->libexample.so.x.y`, `libexample.so-"
-">libexample.so.x` при установке библиотеки для последней минорной версии y. "
-"Таким образом, поскольку статический компоновщик ищет `libexample.so`, когда "
-"указана опция командной строки `-lexample`, объекты, скомпонованные с "
-"libexample, получают информацию о зависимости от правильной библиотеки. "
-"Почти все популярные системы сборки автоматически используют эту схему."
+"ссылок `libexample.so.x->libexample.so.x.y`, `libexample.so->libexample.so.x`"
+" при установке библиотеки для последней минорной версии y. Таким образом, "
+"поскольку статический компоновщик ищет `libexample.so`, когда указана опция "
+"командной строки `-lexample`, объекты, скомпонованные с libexample, получают "
+"информацию о зависимости от правильной библиотеки. Почти все популярные "
+"системы сборки автоматически используют эту схему."
diff --git a/documentation/content/ru/books/developers-handbook/policies/chapter.adoc b/documentation/content/ru/books/developers-handbook/policies/chapter.adoc
deleted file mode 100644
index 970a4b9921..0000000000
--- a/documentation/content/ru/books/developers-handbook/policies/chapter.adoc
+++ /dev/null
@@ -1,196 +0,0 @@
----
-title: Глава 5. Рекомендации и требования к исходному коду
-authors:
- - author: Poul-Henning Kamp
- - author: Giorgos Keramidas
----
-
-[[policies]]
-= Рекомендации и требования к исходному коду
-:doctype: book
-:toc: macro
-:toclevels: 1
-:icons: font
-:sectnums:
-:sectnumlevels: 6
-:sectnumoffset: 5
-:partnums:
-:source-highlighter: rouge
-:experimental:
-:images-path: books/developers-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::[]
-
-В этой главе описываются различные рекомендации и требования, которые должны соблюдаться в дереве исходных текстов FreeBSD.
-
-[[policies-maintainer]]
-== в make-файлах
-
-Если некоторая часть дистрибутива FreeBSD поддерживается некоторым человеком или группой людей, они могут сообщить об этом миру, добавив строчку
-
-[.programlisting]
-....
-MAINTAINER= email-addresses
-....
-
-в файл [.filename]#Makefile#, соответствующий этой части исходного кода.
-
-Смысл этого в следующем:
-
-Сопровождающий владеет кодом и отвечает за него. Это означает, что он несет ответственность за исправление ошибок и закрывает сообщения о проблемах, имеющих отношение к этой части кода, а в случае программного обеспечения, взятого из третьих источников, соответственно отвечает за отслеживание новых версий.
-
-Изменения в каталогах, для которых известен сопровождающий, прежде чем они будут внесены, должны быть посланы ему на рассмотрение. Только если сопровождающий не отвечает в течение достаточно большого периода времени на несколько посланий по электронной почте, разрешается внести изменения без участия сопровождающего. Однако рекомендуется, чтобы вы попытались передать изменения на рассмотрение кому-либо еще, если это вообще возможно.
-
-Конечно же, нельзя назначать человека или группу лиц сопровождающими, если они не согласны выполнять эту работу. С другой стороны, необязательно это должен быть конкретный коммиттер, это может быть и группа людей.
-
-[[policies-contributed]]
-== Программное обеспечение сторонних производителей
-
-Некоторые части дистрибутива FreeBSD состоят из программного обеспечения, которое сопровождается вне проекта FreeBSD. По историческим причинам мы называем такое программное обеспечение _контрибуцированным_ (contributed), или третьих сторон. Примерами этого могут служить утилиты sendmail, gcc и patch.
-
-За последние несколько лет для работы с таким программным обеспечением использовались различные методы, и все они имели свои достоинства и недостатки. Абсолютно подходящего метода так и не нашлось.
-
-По этой причине после некоторых дебатов был выбран и признан "официальным" один из этих методов, который необходимо применять в будущем при импортировании такого рода программного обеспечения. Более того, настоятельно рекомендуется с течением времени перевести существующее программное обеспечение третьих сторон на этот метод, так как он имеет значительные преимущества перед старым методом, включая возможность легкого получения diff-файлов относительно "официальных" версий исходных текстов кем угодно (даже не имеющим доступа к cvs). Это делает данный метод гораздо проще в использовании при необходимости выдачи изменений изначальным разработчикам такого программного обеспечения.
-
-В конце концов, однако, это касается тех, кто делает реальную работу. Если использование этой модели в конкретном случае не подходит для пакета, с которым работает человек, могут быть сделаны и исключения только с согласия основной команды разработчиков и при общем одобрении других разработчиков. Возможность сопровождения пакета в будущем будет являться ключевым моментом при принятии решений.
-
-[NOTE]
-====
-Из-за досадных ограничений в дизайне формата файлов RCS и использовании веток поставщика в CVS, мелкие, тривиальные и/или косметические изменения _сильно не рекомендуется_ в файлах, которые все еще отслеживаются в ветке поставщика. Это касается и "исправления орфографических ошибок" как относящихся к категории "косметических" и избегаемых для файлов с версиями 1.1.x.x. Рост объема хранилища, вызванный изменением в один символ, может оказаться весьма большим.
-====
-
-В качестве примера того, как работает эта модель, будем использовать встраиваемый язык программирования TCL:
-
-Каталог [.filename]#src/contrib/tcl# содержит исходные тексты пакета в том виде, в котором они распространяются его создателями. Части, которые полностью не применимы во FreeBSD, могут быть удалены. В случае Tcl подкаталоги [.filename]#mac#, [.filename]#win# и [.filename]#compat# были удалены перед операцией импортирования
-
-Каталог [.filename]#src/lib/libtcl# содержит только файл [.filename]#Makefile# в стиле bmake, который использует стандартные правила [.filename]#bsd.lib.mk# make-файла для построения библиотеки и установки документации.
-
-В каталоге [.filename]#src/usr.bin/tclsh# размещаются make-файлы в стиле bmake, которые отвечают за построение и установку программы `tclsh` и связанных с ней справочных страниц при помощи стандартных правил из [.filename]#bsd.prog.mk#.
-
-Каталог [.filename]#src/tools/tools/tcl_bmake# содержит несколько shell-скриптов, которые могут помочь при обновлении программного обеспечения tcl. Они не являются частью строящегося и инсталлируемого программного обеспечения.
-
-Здесь важно то, что каталог [.filename]#src/contrib/tcl# создавался в соответствии с правилами: Предполагается, что он содержит исходные тексты в том виде, в котором они распространяются (в соответствующей ветви поставщика CVS и без расширения ключевых слов RCS) с максимально малым количеством изменений, специфичных для FreeBSD. Утилита 'easy-import' на машине поможет в импортировании, но если есть сомнения по поводу выполнения этой операции, то обязательно спросите совета и не действуйте слепо в расчете на то, что "все сработает". CVS не прощает ошибок импортирования и для ликвидации последствий больших ошибок требуются значительные усилия.
-
-Из-за ранее отмеченных ограничений дизайна веток поставщиков в CVS требуется, чтобы "официальные" патчи от разработчика были сначала применены к распространяемым исходным текстам, а затем результат снова импортирован в ветку поставщика. Официальные патчи никогда не должны применяться к версии, извлеченной из хранилища FreeBSD, а затем "коммититься", так как это приведет к рассинхронизации дерева производителя и усложнит импортирование будущих версий, так как возникнут конфликты.
-
-Так как многие пакеты содержат файлы, имеющие значение при обеспечении совместимости с другими, отличными от FreeBSD архитектурами и окружениями, то разрешается удалять части дистрибутивного дерева, не представляющие интереса для FreeBSD в целях уменьшения занимаемого дискового пространства. Файлы, содержащие замечания о юридических правах и информацию о релизе, касающуюся остальных файлов, удаляться _не_ должны.
-
-Если это видится легким, то файлы [.filename]#Makefile# в стиле `bmake` могут быть сгенерированы из дистрибутивного дерева автоматически некоторой утилитой, чем-то, что позволит еще проще обновляться до новой версии. Если это будет сделано, то обязательно поместите эту утилиту (если необходимо) в каталог [.filename]#src/tools# вместе с самим портом, чтобы она была доступна будущим сопровождающим лицам.
-
-В каталог [.filename]#src/contrib/tcl# должен быть добавлен файл [.filename]#FREEBSD-upgrade#, в котором нужно перечислить такие вещи:
-
-* Какие файлы были оставлены
-* Где был взят оригинальный дистрибутив и/или на каком основном официальном сайте он находится.
-* Куда посылать патчи для разработчиков пакета
-* Возможно, обзор сделанных изменений, специфичных для FreeBSD.
-
-Однако, пожалуйста, не импортируйте [.filename]#FREEBSD-upgrade# вместе с исходными текстами этого программного обеспечения. Вместо этого вы должны выполнить команды `cvs add FREEBSD-upgrade ; cvs ci` после первоначального импортирования. Ниже дается пример описания из каталога [.filename]#src/contrib/cpio#:
-
-[.programlisting]
-....
-This directory contains virgin sources of the original distribution files
-on a "vendor" branch. Do not, under any circumstances, attempt to upgrade
-the files in this directory via patches and a cvs commit. New versions or
-official-patch versions must be imported. Please remember to import with
-"-ko" to prevent CVS from corrupting any vendor RCS Ids.
-
-For the import of GNU cpio 2.4.2, the following files were removed:
-
- INSTALL cpio.info mkdir.c
- Makefile.in cpio.texi mkinstalldirs
-
-To upgrade to a newer version of cpio, when it is available:
- 1. Unpack the new version into an empty directory.
- [Do not make ANY changes to the files.]
-
- 2. Remove the files listed above and any others that don't apply to
- FreeBSD.
-
- 3. Use the command:
- cvs import -ko -m 'Virgin import of GNU cpio v<version>' \
- src/contrib/cpio GNU cpio_<version>
-
- For example, to do the import of version 2.4.2, I typed:
- cvs import -ko -m 'Virgin import of GNU v2.4.2' \
- src/contrib/cpio GNU cpio_2_4_2
-
- 4. Follow the instructions printed out in step 3 to resolve any
- conflicts between local FreeBSD changes and the newer version.
-
-Do not, under any circumstances, deviate from this procedure.
-
-To make local changes to cpio, simply patch and commit to the main
-branch (aka HEAD). Never make local changes on the GNU branch.
-
-All local changes should be submitted to "cpio@gnu.ai.mit.edu" for
-inclusion in the next vendor release.
-
-obrien@FreeBSD.org - 30 March 1997
-....
-
-[[policies-encumbered]]
-== Нежелательные файлы
-
-Иногда может быть необходимо включить некоторый нежелательный для нас файл в дерево исходных текстов FreeBSD. Например, если устройство требует загрузки в него некоторого маленького двоичного кода перед тем, как устройство заработает, и мы не имеем исходных текстов этого кода, то говорится, что двоичный файл является нежелательным. Для включения нежелательных файлов в дерево исходных текстов FreeBSD имеются следующие соглашения.
-
-. Любой файл, интерпретируемый или выполняемый системным(и) CPU, не в форме исходного кода, является нежелательным.
-. Любой файл с лицензией, ограничивающей более, чем BSD или GNU, является нежелательным.
-. Файл, содержащий загружаемые двоичные данные, используемые аппаратным обеспечением, не являются нежелательными, если только к нему не применимы условия (1) или (2). Он должен быть сохранен в нейтральном к архитектуре формате ASCII (рекомендуется применить утилиты file2c или uuencode).
-. Любой нежелательный файл требует особого одобрения со стороны extref:{contributors}[Правления, staff-core] до того, как он будет добавлен в хранилище CVS.
-. Нежелательные файлы помещаются в каталог [.filename]#src/contrib# или [.filename]#src/sys/contrib#.
-. Части одного модуля должны храниться вместе. Нет необходимости разбивать их, если только нет совместного использования с кодом, не являющимся нежелательным.
-. Объектные файлы именуются [.filename]#arch/filename.o.uu>#.
-. Файлы ядра;
-.. Должны всегда упоминаться в [.filename]#conf/files.*# (для упрощения построения).
-.. Должны всегда присутствовать в [.filename]#LINT#, но extref:{contributors}[Правление, staff-core] решает в каждом конкретном случае, должны ли они быть раскомментированы или нет. Конечно, позже extref:{contributors}[Правление, staff-core] может изменить свое решение.
-.. Вопрос о вхождении в состав релиза решается _Группой Выпусков Релизов_.
-
-. Файлы уровня пользователя:
-.. extref:{contributors}[Правление, staff-core] решает, должен ли код стать частью выполнения команды `make world`.
-.. extref:{contributors}[Релиз инженер, staff-who] решает, войдут ли они в релиз.
-
-[[policies-shlib]]
-== Динамические библиотеки
-
-Если вы добавляете поддержку динамических библиотек к порту или другой части программного обеспечения, которая этой возможностью не обладает, то номера версий должны назначаться по нижеследующим правилам. Как правило, получающиеся номера не имеют ничего общего с номером релиза программного обеспечения.
-
-При построении динамической библиотеки используются три принципа:
-
-* Начинаем с `1.0`
-* Если есть изменение, которое имеет обратную совместимость, увеличиваем младший номер версии (заметьте, что системы ELF его игнорируют)
-* Если есть изменение, не соблюдающее совместимость, увеличиваем старший номер версии
-
-К примеру, добавление функций и исправление ошибок приводит к увеличению младшего номера версии, а удаление функций, изменение синтаксиса вызова функции и тому подобные изменения приводят к изменению старшего номера версии.
-
-Следуйте схеме нумерации версий в форме старший.младший (_x_._y_). Наш динамический загрузчик формата a.out не умеет нормально работать с номерами версий в форме _x_._y_._z_. Любой номер версии после _y_ (то есть третье число) полностью игнорируется при сравнении номеров версий динамических библиотек для определения того, с какой библиотекой осуществлять компоновку. Если есть две динамические библиотеки, отличающиеся только "микро"-номером версии, то `ld.so` будет осуществлять компоновку с наибольшим номером. Другими словами: если вы компонуете с [.filename]#libfoo.so.3.3.3#, то компоновщик запишет в заголовках только `3.3` и будет выполнять компоновку с любой библиотекой, начинающейся с _libfoo.so.3.(все, что >= 3).(наибольшее из доступного)_.
-
-[NOTE]
-====
-`ld.so` всегда будет использовать наибольшую "младшую" версию. Иными словами: он будет предпочитать использовать [.filename]#libc.so.2.2#, а не [.filename]#libc.so.2.0#, даже если программа изначально была скомпонована с [.filename]#libc.so.2.0#.
-====
-
-Вдобавок наш динамический компоновщик ELF совсем не работает с младшими версиями. Однако все же нужно указывать старший и младший номер версии, а наши файлы [.filename]#Makefile#"сделают все как нужно" в зависимости от типа системы.
-
-Для библиотек не в составе портов, имеется наше соглашение на изменение номера версии динамической библиотеки только один раз между релизами. Кроме того, есть договоренность на изменение старшего номера динамической библиотеки только один раз между главными релизами ОС (например c 3.0 к 4.0). Когда вы делаете изменение в системной библиотеке, которое требует увеличения номера версии, посмотрите журналы коммитов изменений в файле [.filename]#Makefile#. Коммиттер отвечает за то, что первое такое изменение с момента релиза приведет к обновлению номера версии динамической библиотеки в файле [.filename]#Makefile#, а при других последующих изменениях этого бы не делалось.
diff --git a/documentation/content/ru/books/developers-handbook/secure/_index.adoc b/documentation/content/ru/books/developers-handbook/secure/_index.adoc
index 1631ee018b..4a9f6aae40 100644
--- a/documentation/content/ru/books/developers-handbook/secure/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/secure/_index.adoc
@@ -7,7 +7,7 @@ next: books/developers-handbook/l10n
params:
path: /books/developers-handbook/secure/
prev: books/developers-handbook/tools
-showBookMenu: true
+showBookMenu: 'true'
tags: ["secure programming", "Buffer Overflows", "SetUID issues"]
title: 'Глава 3. Безопасное программирование'
weight: 4
@@ -198,7 +198,7 @@ ProPolice помогает защититься от переполнений б
Суперпользователь в среде клетки имеет возможность:
* Управлять учетными данными с помощью `setuid`, `seteuid`, `setgid`, `setegid`, `setgroups`, `setreuid`, `setregid`, `setlogin`
-* Установливать ограничений ресурсов с помощью `setrlimit`
+* Устанавливать ограничений ресурсов с помощью `setrlimit`
* Изменять некоторые узлы sysctl (kern.hostname)
* `chroot()`
* Устанавливать флаги на vnode: `chflags`, `fchflags`
diff --git a/documentation/content/ru/books/developers-handbook/secure/_index.po b/documentation/content/ru/books/developers-handbook/secure/_index.po
index c2900d4b7a..d27f806359 100644
--- a/documentation/content/ru/books/developers-handbook/secure/_index.po
+++ b/documentation/content/ru/books/developers-handbook/secure/_index.po
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
-"PO-Revision-Date: 2025-09-05 04:45+0000\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
+"PO-Revision-Date: 2025-10-29 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksdevelopers-handbooksecure_index/ru/>\n"
@@ -18,13 +18,13 @@ msgstr ""
"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
+#. type: YAML Front Matter: description
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:1
#, no-wrap
msgid "Secure Programming in FreeBSD"
msgstr "Безопасное программирование в FreeBSD"
-#. type: Yaml Front Matter Hash Value: title
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:1
#, no-wrap
msgid "Chapter 3. Secure Programming"
@@ -301,7 +301,9 @@ msgstr ""
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:150
#, no-wrap
msgid " while ((buffer[i++] = getchar()) != '\\n') {};\n"
-msgstr " while ((buffer[i++] = getchar()) != '\\n') {};\n"
+msgstr ""
+" while ((buffer[i++] = getchar()) != '\\n"
+"') {};\n"
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:157
@@ -317,7 +319,8 @@ msgstr ""
" i=1;\n"
" manipulate(buffer);\n"
" i=2;\n"
-" printf(\"The value of i is : %d\\n\",i);\n"
+" printf(\"The value of i is : %d\\n"
+"\",i);\n"
" return 0;\n"
"}\n"
@@ -330,7 +333,7 @@ msgstr ""
"Давайте рассмотрим, как будет выглядеть образ памяти этого процесса, если мы "
"введем 160 пробелов в нашу небольшую программу перед нажатием Enter."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:164
msgid ""
"Obviously more malicious input can be devised to execute actual compiled "
@@ -345,7 +348,7 @@ msgstr ""
msgid "Avoiding Buffer Overflows"
msgstr "Избегание переполнения буфера"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:175
msgid ""
"The most straightforward solution to the problem of stack-overflows is to "
@@ -372,11 +375,10 @@ msgstr ""
"также используется неодинаково между `strncpy` и `strncat`, что может "
"сбивать программистов с толку относительно их правильного использования. "
"Также наблюдается значительное снижение производительности по сравнению с "
-"`strcpy` при копировании короткой строки в большой буфер, поскольку "
-"`strncpy` заполняет оставшееся пространство до указанного размера символами "
-"NUL."
+"`strcpy` при копировании короткой строки в большой буфер, поскольку `strncpy`"
+" заполняет оставшееся пространство до указанного размера символами NUL."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:178
msgid ""
"Another memory copy implementation exists to get around these problems. The "
@@ -393,7 +395,7 @@ msgstr ""
msgid "Compiler based run-time bounds checking"
msgstr "Скомпилированная проверка границ во время выполнения"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:183
msgid ""
"Unfortunately there is still a very large assortment of code in public use "
@@ -408,7 +410,7 @@ msgstr ""
"есть способ помочь предотвратить такие атаки — проверка границ во время "
"выполнения, которая реализована в нескольких компиляторах C/C++."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:186
msgid ""
"ProPolice is one such compiler feature, and is integrated into man:gcc[1] "
@@ -419,7 +421,7 @@ msgstr ""
"man:gcc[1] версий 4.1 и выше. Она заменяет и расширяет более раннее "
"расширение StackGuard для man:gcc[1]."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:190
msgid ""
"ProPolice helps to protect against stack-based buffer overflows and other "
@@ -440,7 +442,7 @@ msgstr ""
"вряд ли увенчается успехом, так как злоумышленнику также необходимо оставить "
"псевдослучайные канарейки нетронутыми."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:192
msgid ""
"Recompiling your application with ProPolice is an effective means of "
@@ -456,7 +458,7 @@ msgstr ""
msgid "Library based run-time bounds checking"
msgstr "Библиотечная проверка границ во время выполнения"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:197
msgid ""
"Compiler-based mechanisms are completely useless for binary-only software "
@@ -472,22 +474,22 @@ msgstr ""
"гарантируют, что эти функции никогда не смогут записать данные за указатель "
"стека."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:199
msgid "libsafe"
msgstr "libsafe"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:200
msgid "libverify"
msgstr "libverify"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:201
msgid "libparanoia"
msgstr "libparanoia"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:206
msgid ""
"Unfortunately these library-based defenses have a number of shortcomings. "
@@ -510,7 +512,7 @@ msgstr ""
msgid "SetUID issues"
msgstr "Проблемы с SetUID"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:212
msgid ""
"There are at least 6 different IDs associated with any given process, and "
@@ -524,7 +526,7 @@ msgstr ""
"seteuid должны отказываться от своих привилегий, как только в них больше нет "
"необходимости."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:215
msgid ""
"The real user ID can only be changed by a superuser process. The login "
@@ -534,7 +536,7 @@ msgstr ""
"процессом с правами суперпользователя. Программа login устанавливает его при "
"первоначальном входе пользователя в систему, и он редко изменяется."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:219
msgid ""
"The effective user ID is set by the `exec()` functions if a program has its "
@@ -557,7 +559,7 @@ msgstr ""
msgid "Limiting your program's environment"
msgstr "Ограничение окружения вашей программы"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:229
msgid ""
"The traditional method of restricting a process is with the `chroot()` "
@@ -582,7 +584,7 @@ msgstr ""
"подключения отладчика к процессу вне окружения man:chroot[8] или многими "
"другими творческими способами."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:234
msgid ""
"The behavior of the `chroot()` system call can be controlled somewhat with "
@@ -607,7 +609,7 @@ msgstr ""
msgid "FreeBSD's jail functionality"
msgstr "Функциональность клеток FreeBSD"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:239
msgid ""
"The concept of a Jail extends upon the `chroot()` by limiting the powers of "
@@ -620,7 +622,7 @@ msgstr ""
"настройки клетки все сетевые взаимодействия должны осуществляться через "
"указанный IP-адрес, а привилегии `root` внутри этой клетки сильно ограничены."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:243
msgid ""
"While in a prison, any tests of superuser power within the kernel using the "
@@ -634,41 +636,41 @@ msgstr ""
"отвечает за распознавание или запрет доступа к правам суперпользователя для "
"процессов в клетке."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:245
msgid "A superuser process within a jailed environment has the power to:"
msgstr "Суперпользователь в среде клетки имеет возможность:"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:247
msgid ""
"Manipulate credential with `setuid`, `seteuid`, `setgid`, `setegid`, "
"`setgroups`, `setreuid`, `setregid`, `setlogin`"
msgstr ""
-"Управлять учетными данными с помощью `setuid`, `seteuid`, `setgid`, "
-"`setegid`, `setgroups`, `setreuid`, `setregid`, `setlogin`"
+"Управлять учетными данными с помощью `setuid`, `seteuid`, `setgid`, `setegid`"
+", `setgroups`, `setreuid`, `setregid`, `setlogin`"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:248
msgid "Set resource limits with `setrlimit`"
-msgstr "Установливать ограничений ресурсов с помощью `setrlimit`"
+msgstr "Устанавливать ограничений ресурсов с помощью `setrlimit`"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:249
msgid "Modify some sysctl nodes (kern.hostname)"
msgstr "Изменять некоторые узлы sysctl (kern.hostname)"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:250
msgid "`chroot()`"
msgstr "`chroot()`"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:251
msgid "Set flags on a vnode: `chflags`, `fchflags`"
msgstr "Устанавливать флаги на vnode: `chflags`, `fchflags`"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:252
msgid ""
"Set attributes of a vnode such as file permission, owner, group, size, "
@@ -677,13 +679,13 @@ msgstr ""
"Устанавливать атрибуты vnode, такие как права доступа к файлу, владелец, "
"группа, размер, время доступа и время изменения."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:253
msgid "Bind to privileged ports in the Internet domain (ports < 1024)"
msgstr ""
"Привязываться к привилегированным портам в домене Интернета (порты < 1024)"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:257
msgid ""
"`Jail` is a very useful tool for running applications in a secure "
@@ -706,7 +708,7 @@ msgstr ""
msgid "POSIX(R).1e Process Capabilities"
msgstr "Возможности процесса в POSIX(R).1e"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:261
msgid ""
"POSIX(R) has released a working draft that adds event auditing, access "
@@ -717,16 +719,16 @@ msgstr ""
"контроля доступа, детализированные привилегии, маркировку информации и "
"обязательный контроль доступа."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:264
msgid ""
"This is a work in progress and is the focus of the http://www.trustedbsd.org/"
"[TrustedBSD] project. Some of the initial work has been committed to "
"FreeBSD-CURRENT (cap_set_proc(3))."
msgstr ""
-"Это работа в процессе, и она является основным направлением проекта http://"
-"www.trustedbsd.org/[TrustedBSD]. Некоторые первоначальные наработки были "
-"добавлены в FreeBSD-CURRENT (cap_set_proc(3))."
+"Это работа в процессе, и она является основным направлением проекта "
+"http://www.trustedbsd.org/[TrustedBSD]. Некоторые первоначальные наработки "
+"были добавлены в FreeBSD-CURRENT (cap_set_proc(3))."
#. type: Title ==
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:266
@@ -734,7 +736,7 @@ msgstr ""
msgid "Trust"
msgstr "Доверие"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:270
msgid ""
"An application should never assume that anything about the users environment "
@@ -748,7 +750,7 @@ msgstr ""
"текущую рабочую директорию файловой системы, файловые дескрипторы, "
"количество открытых файлов и т.д."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:275
msgid ""
"You should never assume that you can catch all forms of invalid input that a "
@@ -767,7 +769,7 @@ msgstr ""
"осторожными с путями (\"../\", \"/\"), символическими ссылками и escape-"
"символами оболочки."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:278
msgid ""
"Perl has a really cool feature called \"Taint\" mode which can be used to "
@@ -789,7 +791,7 @@ msgstr ""
msgid "Race Conditions"
msgstr "Состояние гонки"
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:284
msgid ""
"A race condition is anomalous behavior caused by the unexpected dependence "
@@ -801,7 +803,7 @@ msgstr ""
"ошибочно предположил, что определенное событие всегда произойдет раньше "
"другого."
-#. type: XXX figure here!
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/secure/_index.adoc:290
msgid ""
"Some of the common causes of race conditions are signals, access checks, and "
diff --git a/documentation/content/ru/books/developers-handbook/secure/chapter.adoc b/documentation/content/ru/books/developers-handbook/secure/chapter.adoc
deleted file mode 100644
index 28ff3ac158..0000000000
--- a/documentation/content/ru/books/developers-handbook/secure/chapter.adoc
+++ /dev/null
@@ -1,190 +0,0 @@
----
-title: Глава 3. Безопасное программирование
-authors:
- - author: Murray Stokely
----
-
-[[secure]]
-= Безопасное программирование
-:doctype: book
-:toc: macro
-:toclevels: 1
-:icons: font
-:sectnums:
-:sectnumlevels: 6
-:sectnumoffset: 3
-:partnums:
-:source-highlighter: rouge
-:experimental:
-:images-path: books/developers-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::[]
-
-[[secure-synopsis]]
-== Обзор
-
-Эта глава описывает некоторые из проблем обеспечения безопасности, которые десятилетиями преследовали программистов UNIX(R), а также несколько новых доступных инструментов, помогающих программистам избежать написания небезопасного кода.
-
-[[secure-philosophy]]
-== Методология обеспечения безопасности
-
-Написание безопасных приложений требует весьма критического и пессимистического взгляда на жизнь. Приложения должны работать по принципу "наименьших привилегий", при котором никакой процесс не должен работать с привилегиями, превышающими минимально необходимый для выполнения своих функций минимум. Ранее проверенный код должен использоваться там, где только это возможно для избежания общих ошибок, которые могли быть уже исправлены другими.
-
-Одной из неприятностей в среде UNIX(R) является легкость в предположении безопасности этого окружения. Приложения никогда не должны верить пользовательскому вводу (во всех его формах), ресурсам системы, межпроцессному взаимодействию или времени выполнения событий. Процессы UNIX(R) выполняются не синхронно, так что логические операции редко бывают атомарными.
-
-[[secure-bufferov]]
-== Переполнения буфера
-
-Переполнения буфера появились вместе с появление архитектуры Фон-Неймана <<COD,Впервые широкую известность они получили в 1988 году вместе с Интернет-червем Морриса (Morris). К сожалению, точно такая же атака остаётся эффективной и в наши дни. Из 17 бюллетеней безопасности CERT за 1999 год, 10 были непосредственно вызваны ошибкам в программном обеспечении, связанным с переполнениями буфера. Самые распространенные типы атак с использованием переполнения буфера основаны на разрушении стека.>>
-
-Самые современные вычислительные системы используют стек для передачи аргументов процедурам и сохранения локальных переменных. Стек является буфером типа LIFO (последним вошел первым вышел) в верхней части области памяти процесса. Когда программа вызывает функцию, создается новая "граница стека". Эта граница состоит из аргументов, переданных в функцию, а также динамического количества пространства локальных переменных. "Указатель стека" является регистром, хранящим текущее положение вершины стека. Так как это значение постоянно меняется вместе с помещением новых значений на вершину стека, многие реализации также предусматривают "указатель границы", который расположен около начала стека, так что локальные переменные можно легко адресовать относительно этого значения. <<COD,Адрес возврата из функции также сохраняется в стеке, и это является причиной нарушений безопасности, связанных с переполнением стека, так как перезаписывание локальной переменной в функции может изменить адрес возврата из этой функции, потенциально позволяя злоумышленнику выполнить любой код.>>
-
-Хотя атаки с переполнением стека являются самыми распространенными, стек можно также перезаписать при помощи атаки, основанной на выделении памяти (malloc/free) из "кучи".
-
-Как и во многих других языках программирования, в C не выполняется автоматической проверки границ в массивах или указателях. Кроме того, стандартная библиотека C полна очень опасных функций.
-
-////
-[.informaltable]
-[cols="", frame="none"]
-|===
-|===
-////
-
-== Пример переполнения буфера
-
-В следующем примере кода имеется ошибка переполнения буфера, предназначенная для перезаписи адреса возврата и обхода инструкции, следующей непосредственно за вызовом функции. (По мотивам <<Phrack,)>>
-
-[.programlisting]
-....
-#include stdio.h
-
-void manipulate(char *buffer) {
- char newbuffer[80];
- strcpy(newbuffer,buffer);
-}
-
-int main() {
- char ch,buffer[4096];
- int i=0;
-
- while ((buffer[i++] = getchar()) != '\n') {};
-
- i=1;
- manipulate(buffer);
- i=2;
- printf("The value of i is : %d\n",i);
- return 0;
-}
-....
-
-Давайте посмотрим, как будет выглядеть образ процесса, если в нашу маленькую программу мы введем 160 пробелов.
-
-[XXX figure here!]
-
-Очевидно, что для выполнения реальных инструкций (таких, как exec(/bin/sh)), может быть придуман более вредоносный ввод.
-
-=== Как избежать переполнений буфера
-
-Самым прямолинейным решением проблемы переполнения стека является использование только памяти фиксированного размера и функций копирования строк. Функции `strncpy` и `strncat` являются частью стандартной библиотеки C. Эти функции будут копировать не более указанного количества байт из исходной строки в целевую. Однако у этих функций есть несколько проблем. Ни одна из них не гарантирует наличие символа NUL, если размер входного буфера больше, чем целевого. Параметр длины также по-разному используется в strncpy и strncat, так что для программистов легко запутаться в правильном использовании. Есть также и значительная потеря производительности по сравнению с `strcpy` при копировании короткой строки в большой буфер, потому что `strncpy` заполняет символами NUL пространство до указанной длины.
-
-Для избежания этих проблем в OpenBSD была сделана другая реализация копирования памяти. Функции `strlcpy` и `strlcat` гарантируют, что они они всегда терминируют целевую строку нулевым символом, если им будет передан аргумент ненулевой длины. Более подробная информация об этом находится здесь <<OpenBSD,Инструкции OpenBSD `strlcpy` и `strlcat` существуют во FreeBSD начиная с версии 3.3.>>
-
-==== Вкомпилированная проверка границ во время выполнения
-
-К сожалению, все еще широко используется очень большой объём кода, который слепо копирует память без использования только что рассмотренных функций с проверкой границ. Однако есть другое решение. Существует несколько расширений к компилятору и библиотек для выполнения контроля границ во время выполнения (C/C++).
-
-Одним из таких добавлений является StackGuard, который реализован как маленький патч к генератору кода gcc. Согласно http://immunix.org/stackguard.html[web сайту StackGuard]:
-
-"StackGuard распознает и защищает стек от атак, не позволяя изменять адрес возврата в стеке. При вызове функции StackGuard помещает вслед за адресом возврата сигнальное слово. Если после возврата из функции оно оказывается измененным, то была попытка выполнить атаку на стек, и программа отвечает на это генерацией сообщения о злоумышленнике в системном журнале, а затем прекращает работу."
-
-"StackGuard реализован в виде маленького патча к генератору кода gcc, а именно процедур function_prolog() и function_epilog(). function_prolog() усовершенствована для создания пометок в стеке при начале работы функции, а function_epilog() проверяет целостность пометки при возврате из функции. Таким образом, любые попытки изменения адреса возврата определяются до возврата из функции."
-
-Перекомпиляция вашего приложения со StackGuard является эффективным способом остановить большинство атак переполнений буфера, но все же полностью это проблемы не решает.
-
-==== Проверка границ во время выполнения с использованием библиотек.
-
-Механизмы на основе компилятора полностью бесполезны для программного обеспечения, поставляемого в двоичном виде, которое вы не можете перекомпилировать. В этих ситуациях имеется некоторое количество библиотек, в которых реализованы небезопасные функции библиотеки C (`strcpy`, `fscanf`, `getwd`, и так далее..), обеспечивающие невозможность записи после указателя стека.
-
-* libsafe
-* libverify
-* libparanoia
-
-К сожалению, эти защиты имеют некоторое количество недостатков. Эти библиотеки могут защитить только против малого количества проблем, и не могут исправить реальные проблемы. Эти защиты могут не сработать, если приложение скомпилировано с параметром -fomit-frame-pointer. К тому же переменные окружения LD_PRELOAD и LD_LIBRARY_PATH могут быть переопределены/сняты пользователем.
-
-[[secure-setuid]]
-== Проблемы с установленным битом UID
-
-Имеется по крайней мере 6 различных идентификаторов (ID), связанных с любым взятым процессом. Поэтому вы должны быть очень осторожны с тем, какие права имеет ваш процесс в каждый момент времени. В частности, все seteuid-приложения должны понижать свои привилегии, как только в них отпадает необходимость.
-
-Реальный ID пользователя может быть изменен только процессом администратора. Программа login устанавливает его, когда пользователь входит в систему, и он редко меняется.
-
-Эффективный ID пользователя устанавливается функциями `exec()`, если у программы установлен бит seteuidt. Приложение может выполнить вызов `seteuid()` в любой момент для установки эффективного ID пользователя в значение реального ID пользователя или сохраняемого set-user-ID. Когда эффективный ID пользователя устанавливается функциями `exec()`, его предыдущее значение сохраняется в сохраняемом set-user-ID.
-
-[[secure-chroot]]
-== Ограничение среды работы вашей программы
-
-Традиционно используемым методом ограничения процесса является использование системного вызова `chroot()`. Этот системный вызов меняет корневой каталог, относительно которого определяются все остальные пути в самом процессе и всех порожденных ими процессах. Для того, чтобы этот вызов был выполнен успешно, процесс должен иметь право на выполнение (поиск) каталога, о котором идет речь. Новая среда реально не вступит в силу, пока вы не выполните вызов `chdir()` в вашей новой среде. Следует также отметить, что процесс может с легкостью выйти из chroot-среды, если он имеет привилегии администратора. Это может быть достигнуто созданием файлов устройств для чтения памяти ядра, подключением отладчика к процессу вне узницы и многими другими способами.
-
-Поведение системного вызова `chroot()` можно некоторым образом контролировать `sysctl`-переменной kern.chroot_allow_open_directories. Когда эта переменная установлена в 0, `chroot()` не сработает с ошибкой EPERM, если есть какие-либо открытые каталоги. Если она установлена в значение по умолчанию, равное 1, то `chroot()` не сработает с ошибкой EPERM, если есть какие-либо открытые каталоги и процесс уже подвергнут вызову `chroot()`. Для всех других значений проверка открытости каталогов будет полностью опущена.
-
-=== Функциональность джейлов (jail) во FreeBSD
-
-Концепция джейлов (Jail) расширяет возможности `chroot()`, ограничивая власть администратора созданием настоящих `виртуальных серверов'. Как только тюремная камера создана, все сетевые коммуникации должны осуществляться через выделенный адрес IP, а сила "привилегий пользователя root" в этой тюрьме довольно ограничена.
-
-При работе внутри тюрьмы, любые проверки силы администратора в ядре при помощи вызова `suser()` будут оканчиваться неудачно. Однако некоторые вызовы к `suser()` были изменены на новый интерфейс `suser_xxx()`. Эта функция отвечает за распознание и разрешение доступа к власти администратора для процессов, не находящихся в неволе.
-
-Процесс администратора внутри среды джейла имеет право:
-
-* Манипулировать привилегиями с помощью `setuid`, `seteuid`, `setgid`, `setegid`, `setgroups`, `setreuid`, `setregid` и `setlogin`
-* Устанавливать ограничения на использование ресурсов при помощи `setrlimit`
-* Модифицировать некоторые sysctl-переменные (kern.hostname)
-* `chroot()`
-* Устанавливать следующие флаги на vnode: `chflags`, `fchflags`
-* Устанавливать такие атрибуты vnode, как права доступа к файлу, изменять его владельца, группу, размер, время доступа и модификации.
-* Осуществлять привязку к привилегированному порту в области портов Интернет (порты с номерами 1024)
-
-`Jail` является очень полезным инструментом для запуска приложений в защищенном окружении, но есть и некоторые недостатки. На текущий момент к формату `suser_xxx` не преобразованы механизмы IPC, так что такие приложения, как MySQL, не могут работать в джейле. Права администратора могут имеет малую силу внутри джейла, но нет способа определить, что значит "малую".
-
-=== POSIX(R).1e возможности процессов
-
-POSIX(R) выпустила рабочий документ, который добавляет аудит событий, списки управления доступом, тонко настраиваемые привилегии, метки информации и жесткое управление доступом.
-
-Этот документ находится в работе и находится в центре внимания проекта http://www.trustedbsd.org/[TrustedBSD]. Некоторая начальная функциональность уже была добавлена во FreeBSD-CURRENT (cap_set_proc(3)).
-
-[[secure-trust]]
-== Доверие
-
-Приложение никогда не должно полагать, что среда пользователя безопасна. Сюда включается (но этим не ограничено): ввод пользователя, сигналы, переменные среды, ресурсы, IPC, отображаемая в файл память (mmap), рабочий каталог файловой системы, дескрипторы файлов, число открытых файлов и прочее.
-
-Никогда не думайте, что сможете предусмотреть все формы неправильного ввода, который может дать пользователь. Вместо этого ваше приложение должно осуществлять позитивную фильтрацию, пропуская только конечное множество возможных вариантов ввода, которые вы считаете безопасными. Неполная проверка данных была причиной многих нарушений защиты, особенно CGI-скриптов на веб-сайтах. Для имен файлов вам нужно уделять особое внимание путям ("../", "/"), символическим ссылкам и экранирующим символам оболочки.
-
-В Perl имеется такая очень полезная вещь, как "безупречный" (taint) режим, который можно использовать для запрещения скриптам использовать данные, порожденные вне программы, не безопасным способом. Этот режим проверяет аргументы командной строки, переменные окружения, информацию локализации, результаты некоторых системных вызовов (`readdir()`, `readlink()`, `getpwxxx()` и весь файловый ввод.
-
-[[secure-race-conditions]]
-== Неожиданное поведение
-
-Неожиданное поведение - это аномальное поведение, вызванное непредусмотренной зависимостью от относительной последовательности событий. Другими словами, программист неправильно предположил, что некоторое событие всегда случается перед другим.
-
-Некоторые из широко распространенных причин возникновения таких проблем являются сигналы, проверки доступа и открытия файлов. Сигналы по своей природе являются асинхронными событиями, так что по отношению к ним нужно проявлять особое внимание. Проверка доступа функцией `access(2)` с последующим вызовом `open(2)` полностью не атомарно. Пользователи могут переместить файлы в промежутке между двумя вызовами. Вместо этого привилегированное приложение должно выполнить `seteuid()`, а затем сразу вызвать `open()`. В тех же строках приложение должно всегда устанавливать явно маску прав доступа (umask) перед вызовом функции `open()` во избежание беспорядочных вызовов `chmod()`.
diff --git a/documentation/content/ru/books/developers-handbook/sockets/_index.adoc b/documentation/content/ru/books/developers-handbook/sockets/_index.adoc
index 669a53fb60..e7bd9602bd 100644
--- a/documentation/content/ru/books/developers-handbook/sockets/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/sockets/_index.adoc
@@ -7,7 +7,7 @@ next: books/developers-handbook/ipv6
params:
path: /books/developers-handbook/sockets/
prev: books/developers-handbook/partii
-showBookMenu: true
+showBookMenu: 'true'
tags: ["Sockets", "Protocols"]
title: 'Глава 7. Сокеты'
weight: 9
diff --git a/documentation/content/ru/books/developers-handbook/sockets/_index.po b/documentation/content/ru/books/developers-handbook/sockets/_index.po
index 7136478a70..6d54c894fa 100644
--- a/documentation/content/ru/books/developers-handbook/sockets/_index.po
+++ b/documentation/content/ru/books/developers-handbook/sockets/_index.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-05-01 19: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/"
@@ -18,13 +18,13 @@ msgstr ""
"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
+#. type: YAML Front Matter: description
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1
#, no-wrap
msgid "FreeBSD Sockets"
msgstr "Сокеты FreeBSD"
-#. type: Yaml Front Matter Hash Value: title
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:1
#, no-wrap
msgid "Chapter 7. Sockets"
@@ -665,14 +665,13 @@ msgid ""
msgstr ""
"Аргумент `domain` указывает системе, какое _семейство протоколов_ следует "
"использовать. Существует множество семейств, некоторые из них специфичны для "
-"определённых поставщиков, другие широко распространены. Они объявлены в "
-"[.filename]#sys/socket.h#."
+"определённых поставщиков, другие широко распространены. Они объявлены в [."
+"filename]#sys/socket.h#."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:252
msgid "Use `PF_INET` for UDP, TCP and other Internet protocols (IPv4)."
-msgstr ""
-"Используйте `PF_INET` для UDP, TCP и других интернет-протоколов (IPv4)."
+msgstr "Используйте `PF_INET` для UDP, TCP и других интернет-протоколов (IPv4)."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:256
@@ -682,11 +681,10 @@ msgid ""
"`SOCK_STREAM`, which tells the system you are asking for a _reliable stream "
"delivery service_ (which is TCP when used with `PF_INET`)."
msgstr ""
-"Для аргумента `type` определено пять значений, также указанных в "
-"[.filename]#sys/socket.h#. Все они начинаются с \"`SOCK_`\". Наиболее "
-"распространённое — `SOCK_STREAM`, которое указывает системе, что "
-"запрашивается _надёжный сервис потоковой доставки_ (это TCP при "
-"использовании с `PF_INET`)."
+"Для аргумента `type` определено пять значений, также указанных в [.filename]#"
+"sys/socket.h#. Все они начинаются с \"`SOCK_`\". Наиболее распространённое — "
+"`SOCK_STREAM`, которое указывает системе, что запрашивается _надёжный сервис "
+"потоковой доставки_ (это TCP при использовании с `PF_INET`)."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:258
@@ -795,8 +793,8 @@ msgid ""
"as an array of `14` bytes, with the comment hinting there can be more than "
"`14` of them."
msgstr ""
-"Обратите внимание на _неопределённость_, с которой объявлено поле `sa_data` "
-"— просто как массив из `14` байт, с комментарием, намекающим, что их может "
+"Обратите внимание на _неопределённость_, с которой объявлено поле `sa_data` —"
+" просто как массив из `14` байт, с комментарием, намекающим, что их может "
"быть больше `14`."
#. type: Plain text
@@ -1020,8 +1018,8 @@ msgstr ""
"текстовую строку с текущей датой и временем в порт 13. Мы хотим использовать "
"TCP/IP, поэтому нам нужно указать `AF_INET` в поле семейства адресов. "
"`AF_INET` определен как `2`. Давайте используем IP-адрес `192.43.244.18`, "
-"который является сервером времени федерального правительства США "
-"(`time.nist.gov`)."
+"который является сервером времени федерального правительства США (`time.nist."
+"gov`)."
#. type: Block title
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:388
@@ -1349,8 +1347,8 @@ msgid ""
"problem."
msgstr ""
"Это _обманет_ наш компилятор, заставив его сохранить данные в _порядке "
-"байтов сети_. В некоторых случаях это именно тот способ, который нужен "
-"(например, при программировании на ассемблере). Однако в большинстве случаев "
+"байтов сети_. В некоторых случаях это именно тот способ, который нужен ("
+"например, при программировании на ассемблере). Однако в большинстве случаев "
"это может вызвать проблему."
#. type: Plain text
@@ -1754,8 +1752,8 @@ msgstr ""
"Помимо указания порта в `addr`, сервер может включать свой IP-адрес. Однако "
"он может просто использовать символическую константу INADDR_ANY, чтобы "
"указать, что будет обслуживать все запросы на указанный порт, независимо от "
-"его IP-адреса. Этот символ, наряду с несколькими аналогичными, объявлен в "
-"[.filename]#netinet/in.h#"
+"его IP-адреса. Этот символ, наряду с несколькими аналогичными, объявлен в [."
+"filename]#netinet/in.h#"
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:639
@@ -1884,8 +1882,8 @@ msgid ""
"What happens to the old socket? It continues to listen for more requests "
"(remember the `backlog` variable we passed to `listen`?) until we `close` it."
msgstr ""
-"Что происходит со старым сокетом? Он продолжает ожидать новые запросы "
-"(помните переменную `backlog`, которую мы передали в `listen`?), пока мы не "
+"Что происходит со старым сокетом? Он продолжает ожидать новые запросы ("
+"помните переменную `backlog`, которую мы передали в `listen`?), пока мы не "
"закроем его (`close`)."
#. type: Plain text
@@ -1923,8 +1921,8 @@ msgid ""
"program invoked it)."
msgstr ""
"Это лучше всего достигается созданием _дочернего процесса_ после привязки "
-"порта. Затем основной процесс завершается и возвращает управление оболочке "
-"(или любой другой программе, которая его вызвала)."
+"порта. Затем основной процесс завершается и возвращает управление оболочке ("
+"или любой другой программе, которая его вызвала)."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:701
@@ -2146,7 +2144,8 @@ msgid ""
" tm->tm_sec);\n"
msgstr ""
" tm = gmtime(&t);\n"
-" fprintf(client, \"%.4i-%.2i-%.2iT%.2i:%.2i:%.2iZ\\n\",\n"
+" fprintf(client, \"%.4i-%.2i-%.2iT%.2i:%.2i:%.2iZ\\n"
+"\",\n"
" tm->tm_year + 1900,\n"
" tm->tm_mon + 1,\n"
" tm->tm_mday,\n"
@@ -2240,7 +2239,7 @@ msgid ""
msgstr ""
"Наконец, демон запускает бесконечный цикл, который выполняет следующие шаги:"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:820
msgid ""
"Call `accept`. It waits here until a client contacts it. At that point, it "
@@ -2251,7 +2250,7 @@ msgstr ""
"момент он получает новый сокет, `c`, который можно использовать для обмена "
"данными с этим конкретным клиентом."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:821
msgid ""
"It uses the C function `fdopen` to turn the socket from a low-level _file "
@@ -2262,7 +2261,7 @@ msgstr ""
"низкоуровневого _дескриптора файла_ в указатель типа `FILE` в стиле C. Это "
"позволит в дальнейшем использовать `fprintf`."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:822
msgid ""
"It checks the time, and prints it in the _ISO 8601_ format to the `client` "
@@ -2273,7 +2272,7 @@ msgstr ""
"Затем он использует `fclose` для закрытия файла. Это также автоматически "
"закроет сокет."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:824
msgid "We can _generalize_ this, and use it as a model for many other servers:"
msgstr ""
@@ -2292,7 +2291,7 @@ msgstr "Последовательный Сервер"
msgid "serv.png"
msgstr "serv.png"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:832
msgid ""
"This flowchart is good for _sequential servers_, i.e., servers that can "
@@ -2309,7 +2308,7 @@ msgstr ""
"обнаруживает подключение клиента, он отправляет некоторые данные и закрывает "
"соединение. Вся операция может занять наносекунды, и она завершена."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:835
msgid ""
"The advantage of this flowchart is that, except for the brief moment after "
@@ -2321,7 +2320,7 @@ msgstr ""
"всегда активен только один _процесс_: Наш сервер не занимает много памяти и "
"других системных ресурсов."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:839
msgid ""
"Note that we have added _initialize daemon_ in our flowchart. We did not "
@@ -2333,7 +2332,7 @@ msgstr ""
"место в потоке выполнения программы для настройки обработчиков `signal`, "
"открытия необходимых файлов и т. д."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:843
msgid ""
"Just about everything in the flow chart can be used literally on many "
@@ -2346,7 +2345,7 @@ msgstr ""
"его как _\"чёрный ящик\"_, то есть нечто, что вы проектируете специально для "
"своего сервера и просто \"подключаете к остальной системе.\""
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:849
msgid ""
"Not all protocols are that simple. Many receive a request from the client, "
@@ -2363,15 +2362,15 @@ msgstr ""
"процесс обслуживает своего клиента, демон может продолжать прослушивать "
"новые подключения."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:852
msgid ""
"Now, go ahead, save the above source code as [.filename]#daytimed.c# (it is "
"customary to end the names of daemons with the letter `d`). After you have "
"compiled it, try running it:"
msgstr ""
-"Теперь сохраните приведённый исходный код в файл [.filename]#daytimed.c# "
-"(обычно имена демонов оканчиваются буквой `d`). После компиляции попробуйте "
+"Теперь сохраните приведённый исходный код в файл [.filename]#daytimed.c# ("
+"обычно имена демонов оканчиваются буквой `d`). После компиляции попробуйте "
"запустить его:"
#. type: delimited block . 4
@@ -2619,8 +2618,8 @@ msgid ""
msgstr ""
"Хотя нет возможности передать имя домена напрямую в какие-либо функции "
"сокетов, стандартная библиотека C в FreeBSD предоставляет функции "
-"man:gethostbyname[3] и man:gethostbyname2[3], объявленные в "
-"[.filename]#netdb.h#."
+"man:gethostbyname[3] и man:gethostbyname2[3], объявленные в [.filename]#netdb"
+".h#."
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/sockets/_index.adoc:959
@@ -2874,7 +2873,8 @@ msgstr ""
"struct servent *se;\n"
" ...\n"
" if ((se = getservbyname(\"daytime\", \"tcp\")) == NULL {\n"
-" fprintf(stderr, \"Cannot determine which port to use.\\n\");\n"
+" fprintf(stderr, \"Cannot determine which port to use.\\n"
+"\");\n"
" return 7;\n"
" }\n"
" sa.sin_port = se->s_port;\n"
@@ -2984,11 +2984,11 @@ msgid ""
"no longer functional but still roaming around."
msgstr ""
"В UNIX(R) процесс на самом деле не _завершается_. Вместо этого он "
-"_возвращается_ к своему родителю. Обычно родительский процесс ``ждёт`` "
-"(wait) завершения своего дочернего процесса и получает возвращаемое "
-"значение. Однако наш _демон-процесс_ не может просто остановиться и ждать. "
-"Это бы свело на нет всю цель создания дополнительных процессов. Но если он "
-"никогда не выполняет `wait`, его дочерние процессы станут _зомби_ — более не "
+"_возвращается_ к своему родителю. Обычно родительский процесс ``ждёт`` (wait)"
+" завершения своего дочернего процесса и получает возвращаемое значение. "
+"Однако наш _демон-процесс_ не может просто остановиться и ждать. Это бы "
+"свело на нет всю цель создания дополнительных процессов. Но если он никогда "
+"не выполняет `wait`, его дочерние процессы станут _зомби_ — более не "
"функционирующими, но всё ещё бродящими вокруг."
#. type: Plain text
diff --git a/documentation/content/ru/books/developers-handbook/testing/_index.adoc b/documentation/content/ru/books/developers-handbook/testing/_index.adoc
index a801c9644f..21b792de6f 100644
--- a/documentation/content/ru/books/developers-handbook/testing/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/testing/_index.adoc
@@ -1,11 +1,11 @@
---
-authors:
+authors: ~
description: 'Регрессионное и нагрузочное тестирование'
next: books/developers-handbook/partii
params:
path: /books/developers-handbook/testing/
prev: books/developers-handbook/policies
-showBookMenu: true
+showBookMenu: 'true'
tags: ["Regression", "Performance Testing", "Testing", "Tinderbox"]
title: 'Глава 6. Регрессионное и нагрузочное тестирование'
weight: 7
diff --git a/documentation/content/ru/books/developers-handbook/testing/_index.po b/documentation/content/ru/books/developers-handbook/testing/_index.po
index 220968249a..79fcce856d 100644
--- a/documentation/content/ru/books/developers-handbook/testing/_index.po
+++ b/documentation/content/ru/books/developers-handbook/testing/_index.po
@@ -5,7 +5,7 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
"PO-Revision-Date: 2025-06-27 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
@@ -25,7 +25,7 @@ msgstr ""
msgid "Regression and Performance Testing"
msgstr "Регрессионное и нагрузочное тестирование"
-#. type: Yaml Front Matter Hash Value: title
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/testing/_index.adoc:1
#, no-wrap
msgid "Chapter 6. Regression and Performance Testing"
@@ -107,8 +107,8 @@ msgid ""
"If man:syslog[3] events are generated, run man:syslogd[8] with an empty "
"[.filename]#/etc/syslogd.conf#, otherwise, do not run it."
msgstr ""
-"Если события man:syslog[3] генерируются, запустите man:syslogd[8] с пустым "
-"[.filename]#/etc/syslogd.conf#, в противном случае не запускайте его."
+"Если события man:syslog[3] генерируются, запустите man:syslogd[8] с пустым [."
+"filename]#/etc/syslogd.conf#, в противном случае не запускайте его."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/testing/_index.adoc:68
@@ -285,8 +285,8 @@ msgid ""
"possible to spot interaction effects."
msgstr ""
"Выполните тест как минимум 3 раза, но лучше запустить более 20 раз как для "
-"кода \"до\", так и для кода \"после\". По возможности чередуйте запуски "
-"(т.е. не следует запускать 20 раз \"до\", а затем 20 раз \"после\"), это "
+"кода \"до\", так и для кода \"после\". По возможности чередуйте запуски ("
+"т.е. не следует запускать 20 раз \"до\", а затем 20 раз \"после\"), это "
"поможет выявить влияние окружения. Не чередуйте строго 1:1, а лучше 3:3, "
"чтобы можно было обнаружить эффекты взаимодействия."
@@ -328,8 +328,8 @@ msgid ""
"is a test with snapshots."
msgstr ""
"Не используйте фоновый man:fsck[8], если тест не является бенчмарком "
-"фонового `fsck`. Также отключите `background_fsck` в [.filename]#/etc/"
-"rc.conf#, если бенчмарк не запускается как минимум через 60+«время работы "
+"фонового `fsck`. Также отключите `background_fsck` в [.filename]#/etc/rc."
+"conf#, если бенчмарк не запускается как минимум через 60+«время работы "
"``fsck``» секунд после загрузки, так как man:rc[8] пробуждается и проверяет, "
"нужно ли запускать `fsck` для каких-либо файловых систем, когда включен "
"фоновый `fsck`. Аналогично, убедитесь, что нет оставшихся снимков, если "
@@ -445,8 +445,8 @@ msgid ""
msgstr ""
"Скрипты поддерживаются и были разработаны {des}, и сейчас написаны на Perl, "
"что стало шагом вперед по сравнению с их первоначальной версией в виде shell-"
-"скриптов. Все скрипты и конфигурационные файлы хранятся в https://"
-"www.freebsd.org/cgi/cvsweb.cgi/projects/tinderbox/[/projects/tinderbox/]."
+"скриптов. Все скрипты и конфигурационные файлы хранятся в https://www.freebsd"
+".org/cgi/cvsweb.cgi/projects/tinderbox/[/projects/tinderbox/]."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/testing/_index.adoc:109
@@ -708,9 +708,9 @@ msgid ""
"www.sentex.ca[Sentex Data Communications], who also host the FreeBSD Netperf "
"Cluster."
msgstr ""
-"Официальные серверы сборки Tinderbox размещены на площадке http://"
-"www.sentex.ca[Sentex Data Communications], которая также предоставляет "
-"хостинг для кластера Netperf FreeBSD."
+"Официальные серверы сборки Tinderbox размещены на площадке http://www.sentex."
+"ca[Sentex Data Communications], которая также предоставляет хостинг для "
+"кластера Netperf FreeBSD."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/testing/_index.adoc:183
diff --git a/documentation/content/ru/books/developers-handbook/tools/_index.adoc b/documentation/content/ru/books/developers-handbook/tools/_index.adoc
index 83dbc7784c..d59f1ed5b1 100644
--- a/documentation/content/ru/books/developers-handbook/tools/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/tools/_index.adoc
@@ -9,7 +9,7 @@ next: books/developers-handbook/secure
params:
path: /books/developers-handbook/tools/
prev: books/developers-handbook/introduction
-showBookMenu: true
+showBookMenu: 'true'
tags: ["tools", "Interpreters", "Compilers", "cc", "make", "Debugging", "lldb", "gdb", "clang", "Emacs"]
title: 'Глава 2. Инструменты разработки'
weight: 3
@@ -144,7 +144,7 @@ Tcl — это встраиваемый интерпретируемый язы
Как только вы напишете свой шедевр, следующий шаг — преобразовать его во что-то, что (надеюсь!) будет работать на FreeBSD. Обычно это включает несколько шагов, каждый из которых выполняется отдельной программой.
[.procedure]
-. Обработь исходный код, чтобы удалить комментарии и выполнить другие действия, такие как раскрытие макросов в C.
+. Обработать исходный код, чтобы удалить комментарии и выполнить другие действия, такие как раскрытие макросов в C.
. Проверить синтаксис вашего кода, чтобы убедиться, что вы соблюдаете правила языка. Если нет, он пожалуется!
. Преобразовать исходный код в ассемблерный язык — это очень близко к машинному коду, но всё ещё понятно человеку. Как утверждается.
. Преобразовать язык ассемблера в машинный код — да, здесь речь идет о битах и байтах, единицах и нулях.
diff --git a/documentation/content/ru/books/developers-handbook/tools/_index.po b/documentation/content/ru/books/developers-handbook/tools/_index.po
index 47c68c25ff..beb27c1af4 100644
--- a/documentation/content/ru/books/developers-handbook/tools/_index.po
+++ b/documentation/content/ru/books/developers-handbook/tools/_index.po
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
-"PO-Revision-Date: 2025-07-05 04:45+0000\n"
+"POT-Creation-Date: 2025-06-29 21:20+0100\n"
+"PO-Revision-Date: 2025-10-15 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksdevelopers-handbooktools_index/ru/>\n"
@@ -25,7 +25,7 @@ msgstr ""
msgid "Programming Tools"
msgstr "Инструменты разработки"
-#. type: Yaml Front Matter Hash Value: title
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1
#, no-wrap
msgid "Chapter 2. Programming Tools"
@@ -276,9 +276,9 @@ msgid ""
msgstr ""
"Язык, разработанный в конце 1950-х годов как альтернатива популярным в то "
"время языкам для «численных расчётов». В отличие от них, Lisp основан на "
-"списках; фактически, название является сокращением от «List Processing» "
-"(обработка списков). Он очень популярен в кругах, связанных с ИИ "
-"(искусственным интеллектом)."
+"списках; фактически, название является сокращением от «List Processing» ("
+"обработка списков). Он очень популярен в кругах, связанных с ИИ ("
+"искусственным интеллектом)."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:123
@@ -349,13 +349,12 @@ msgstr ""
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:140
msgid ""
"Scheme is available from the Ports Collection as package:lang/elk[] for the "
-"Elk Scheme Interpreter. The MIT Scheme Interpreter can be found in "
-"package:lang/mit-scheme[] and the SCM Scheme Interpreter in package:lang/"
-"scm[]."
+"Elk Scheme Interpreter. The MIT Scheme Interpreter can be found in package:"
+"lang/mit-scheme[] and the SCM Scheme Interpreter in package:lang/scm[]."
msgstr ""
"Схема доступна из Коллекции Портов как package:lang/elk[] для Интерпретатора "
-"Elk Scheme. Интерпретатор MIT Scheme можно найти в package:lang/mit-"
-"scheme[], а Интерпретатор SCM Scheme — в package:lang/scm[]."
+"Elk Scheme. Интерпретатор MIT Scheme можно найти в package:lang/mit-scheme[]"
+", а Интерпретатор SCM Scheme — в package:lang/scm[]."
#. type: Labeled list
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:141
@@ -367,17 +366,16 @@ msgstr "Lua"
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:147
msgid ""
"Lua is a lightweight embeddable scripting language. It is widely portable "
-"and relatively simple. Lua is available in the Ports Collection in "
-"package:lang/lua54[]. It is also included in the base system as "
-"[.filename]#/usr/libexec/flua# for use by base system components. Third "
-"party software should not depend on [.filename]#flua#."
+"and relatively simple. Lua is available in the Ports Collection in package:"
+"lang/lua54[]. It is also included in the base system as [.filename]#/usr/"
+"libexec/flua# for use by base system components. Third party software "
+"should not depend on [.filename]#flua#."
msgstr ""
"Lua — это легковесный встраиваемый язык сценариев. Он обладает высокой "
"переносимостью и относительно прост. Lua доступен в коллекции портов в "
-"пакете package:lang/lua54[]. Он также включен в базовую систему как "
-"[.filename]#/usr/libexec/flua# для использования компонентами базовой "
-"системы. Стороннее программное обеспечение не должно зависеть от "
-"[.filename]#flua#."
+"пакете package:lang/lua54[]. Он также включен в базовую систему как [."
+"filename]#/usr/libexec/flua# для использования компонентами базовой системы. "
+"Стороннее программное обеспечение не должно зависеть от [.filename]#flua#."
#. type: Labeled list
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:148
@@ -485,9 +483,8 @@ msgstr ""
"проверяете, принимает ли он вашу программу. Если программа не "
"скомпилировалась, стисните зубы и вернитесь к редактору; если же компиляция "
"прошла успешно и программа была создана, вы можете запустить её либо в "
-"командной строке оболочки, либо в отладчике, чтобы проверить её "
-"работу.footnote:[Если вы запустите её в оболочке, может произойти дамп "
-"памяти.]"
+"командной строке оболочки, либо в отладчике, чтобы проверить её работу."
+"footnote:[Если вы запустите её в оболочке, может произойти дамп памяти.]"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:181
@@ -510,8 +507,8 @@ msgstr ""
"операционную систему! Это также полезно, если требуется написать очень "
"эффективный код, так как компилятор может не спешить и оптимизировать код, "
"что было бы неприемлемо в интерпретаторе. Более того, распространение "
-"программы, написанной для компилятора, обычно проще, чем для интерпретатора "
-"— можно просто предоставить копию исполняемого файла, предполагая, что у "
+"программы, написанной для компилятора, обычно проще, чем для интерпретатора —"
+" можно просто предоставить копию исполняемого файла, предполагая, что у "
"пользователя та же операционная система, что и у вас."
#. type: Plain text
@@ -566,16 +563,16 @@ msgstr ""
"то, что (надеюсь!) будет работать на FreeBSD. Обычно это включает несколько "
"шагов, каждый из которых выполняется отдельной программой."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:198
msgid ""
"Pre-process your source code to remove comments and do other tricks like "
"expanding macros in C."
msgstr ""
-"Обработь исходный код, чтобы удалить комментарии и выполнить другие "
+"Обработать исходный код, чтобы удалить комментарии и выполнить другие "
"действия, такие как раскрытие макросов в C."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:199
msgid ""
"Check the syntax of your code to see if you have obeyed the rules of the "
@@ -584,7 +581,7 @@ msgstr ""
"Проверить синтаксис вашего кода, чтобы убедиться, что вы соблюдаете правила "
"языка. Если нет, он пожалуется!"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:200
msgid ""
"Convert the source code into assembly language-this is very close to machine "
@@ -593,7 +590,7 @@ msgstr ""
"Преобразовать исходный код в ассемблерный язык — это очень близко к "
"машинному коду, но всё ещё понятно человеку. Как утверждается."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:201
msgid ""
"Convert the assembly language into machine code-yep, we are talking bits and "
@@ -602,7 +599,7 @@ msgstr ""
"Преобразовать язык ассемблера в машинный код — да, здесь речь идет о битах и "
"байтах, единицах и нулях."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:202
msgid ""
"Check that you have used things like functions and global variables in a "
@@ -613,7 +610,7 @@ msgstr ""
"переменные, правильно и последовательно. Например, если вы вызвали "
"несуществующую функцию, это будет отмечено."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:203
msgid ""
"If you are trying to produce an executable from several source code files, "
@@ -622,7 +619,7 @@ msgstr ""
"Если вы пытаетесь создать исполняемый файл из нескольких исходных файлов, "
"определить, как объединить их все вместе."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:204
msgid ""
"Work out how to produce something that the system's run-time loader will be "
@@ -631,12 +628,12 @@ msgstr ""
"Определить, как создать что-то, что загрузчик времени выполнения системы "
"сможет загрузить в память и запустить."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:205
msgid "Finally, write the executable on the filesystem."
msgstr "Наконец, записать исполняемый файл в файловую систему."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:208
msgid ""
"The word _compiling_ is often used to refer to just steps 1 to 4-the others "
@@ -647,7 +644,7 @@ msgstr ""
"называются _линковкой_. Иногда шаг 1 называют _препроцессированием_, а шаги "
"3-4 — _ассемблированием_."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:210
msgid ""
"Fortunately, almost all this detail is hidden from you, as `cc` is a front "
@@ -746,8 +743,8 @@ msgid ""
"just want to check the syntax, or if you are using a [.filename]#Makefile#."
msgstr ""
"Просто скомпилирует файл, не связывая его. Полезно для небольших программ, "
-"где нужно только проверить синтаксис, или если вы используете "
-"[.filename]#Makefile#."
+"где нужно только проверить синтаксис, или если вы используете [."
+"filename]#Makefile#."
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:247
@@ -758,13 +755,12 @@ msgstr "% cc -c foobar.c\n"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:251
msgid ""
-"This will produce an _object file_ (not an executable) called "
-"[.filename]#foobar.o#. This can be linked together with other object files "
+"This will produce an _object file_ (not an executable) called [."
+"filename]#foobar.o#. This can be linked together with other object files "
"into an executable."
msgstr ""
-"Это создаст _объектный файл_ (не исполняемый) с именем "
-"[.filename]#foobar.o#. Его можно скомпоновать с другими объектными файлами в "
-"исполняемый файл."
+"Это создаст _объектный файл_ (не исполняемый) с именем [.filename]#foobar.o#"
+". Его можно скомпоновать с другими объектными файлами в исполняемый файл."
#. type: Labeled list
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:252
@@ -937,8 +933,8 @@ msgstr "% cc -Wall -ansi -pedantic -o foobar foobar.c\n"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:307
msgid ""
-"This will produce an executable [.filename]#foobar# after checking "
-"[.filename]#foobar.c# for standard compliance."
+"This will produce an executable [.filename]#foobar# after checking [."
+"filename]#foobar.c# for standard compliance."
msgstr ""
"В результате будет создан исполняемый файл [.filename]#foobar# после "
"проверки [.filename]#foobar.c# на соответствие стандартам."
@@ -973,16 +969,16 @@ msgstr ""
msgid ""
"The rule is that if the library is called [.filename]#libsomething.a#, you "
"give `cc` the argument `-l__something__`. For example, the math library is "
-"[.filename]#libm.a#, so you give `cc` the argument `-lm`. A common "
-"\"gotcha\" with the math library is that it has to be the last library on "
-"the command line."
+"[.filename]#libm.a#, so you give `cc` the argument `-lm`. A common \"gotcha"
+"\" with the math library is that it has to be the last library on the "
+"command line."
msgstr ""
-"Правило заключается в том, что если библиотека называется "
-"[.filename]#libsomething.a#, то вы передаёте `cc` аргумент `-"
-"l__something__`. Например, математическая библиотека называется "
-"[.filename]#libm.a#, поэтому вы передаёте `cc` аргумент `-lm`. Типичный "
-"подводный камень с математической библиотекой заключается в том, что она "
-"должна быть последней библиотекой в командной строке."
+"Правило заключается в том, что если библиотека называется [."
+"filename]#libsomething.a#, то вы передаёте `cc` аргумент `-l__something__`. "
+"Например, математическая библиотека называется [.filename]#libm.a#, поэтому "
+"вы передаёте `cc` аргумент `-lm`. Типичный подводный камень с математической "
+"библиотекой заключается в том, что она должна быть последней библиотекой в "
+"командной строке."
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:321
@@ -994,8 +990,8 @@ msgstr "% cc -o foobar foobar.c -lm\n"
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:324
msgid "This will link the math library functions into [.filename]#foobar#."
msgstr ""
-"Это приведёт к подключению функций математической библиотеки в "
-"[.filename]#foobar#."
+"Это приведёт к подключению функций математической библиотеки в [."
+"filename]#foobar#."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:327
@@ -1019,8 +1015,8 @@ msgid ""
"This will both produce an executable [.filename]#foobar# from the C++ source "
"file [.filename]#foobar.cc#."
msgstr ""
-"Это создаст исполняемый файл [.filename]#foobar# из исходного файла на C++ "
-"[.filename]#foobar.cc#."
+"Это создаст исполняемый файл [.filename]#foobar# из исходного файла на C++ [."
+"filename]#foobar.cc#."
#. type: Title ===
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:335
@@ -1032,7 +1028,9 @@ msgstr "Распространённые вопросы и проблемы `cc`
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:337
#, no-wrap
msgid "I compiled a file called foobar.c and I cannot find an executable called foobar. Where has it gone?"
-msgstr "Я скомпилировал файл с именем foobar.c и не могу найти исполняемый файл с именем foobar. Куда он пропал?"
+msgstr ""
+"Я скомпилировал файл с именем foobar.c и не могу найти исполняемый файл с "
+"именем foobar. Куда он пропал?"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:341
@@ -1053,7 +1051,10 @@ msgstr "% cc -o foobar foobar.c\n"
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:347
#, no-wrap
msgid "OK, I have an executable called foobar, I can see it when I run ls, but when I type in foobar at the command prompt it tells me there is no such file. Why can it not find it?"
-msgstr "Хорошо, у меня есть исполняемый файл с именем foobar, я вижу его при выполнении команды ls, но когда я ввожу foobar в командной строке, система сообщает, что такого файла нет. Почему он не может его найти?"
+msgstr ""
+"Хорошо, у меня есть исполняемый файл с именем foobar, я вижу его при "
+"выполнении команды ls, но когда я ввожу foobar в командной строке, система "
+"сообщает, что такого файла нет. Почему он не может его найти?"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:351
@@ -1065,14 +1066,16 @@ msgid ""
msgstr ""
"В отличие от MS-DOS(R), UNIX(R) не ищет в текущем каталоге, когда пытается "
"определить, какую программу нужно запустить, если вы явно не укажете это. "
-"Введите `./foobar`, что означает \"запустить файл с именем "
-"[.filename]#foobar# в текущем каталоге.\""
+"Введите `./foobar`, что означает \"запустить файл с именем [."
+"filename]#foobar# в текущем каталоге.\""
#. type: Title ===
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:352
#, no-wrap
msgid "I called my executable test, but nothing happens when I run it. What is going on?"
-msgstr "Я назвал свой исполняемый файл test, но при запуске ничего не происходит. В чем дело?"
+msgstr ""
+"Я назвал свой исполняемый файл test, но при запуске ничего не происходит. В "
+"чем дело?"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:356
@@ -1081,8 +1084,8 @@ msgid ""
"and the shell is picking that one up before it gets to checking the current "
"directory. Either type:"
msgstr ""
-"Большинство UNIX(R) систем имеют программу под названием `test` в "
-"[.filename]#/usr/bin#, и оболочка выбирает её, прежде чем проверить текущий "
+"Большинство UNIX(R) систем имеют программу под названием `test` в [."
+"filename]#/usr/bin#, и оболочка выбирает её, прежде чем проверить текущий "
"каталог. Введите следующее:"
#. type: delimited block . 4
@@ -1100,7 +1103,9 @@ msgstr "или выберите более подходящее название
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:364
#, no-wrap
msgid "I compiled my program and it seemed to run all right at first, then there was an error and it said something about core dumped. What does that mean?"
-msgstr "Я скомпилировал свою программу, и сначала она работала нормально, но потом произошла ошибка, и было сообщение о core dumped. Что это значит?"
+msgstr ""
+"Я скомпилировал свою программу, и сначала она работала нормально, но потом "
+"произошла ошибка, и было сообщение о core dumped. Что это значит?"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:368
@@ -1129,14 +1134,16 @@ msgid ""
"Use a debugger to analyze the core (see crossref:tools[debugging, "
"Debugging])."
msgstr ""
-"Используйте отладчик для анализа образа памяти (см. "
-"crossref:tools[debugging, Отладка])."
+"Используйте отладчик для анализа образа памяти (см. crossref:tools["
+"debugging, Отладка])."
#. type: Title ====
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:373
#, no-wrap
msgid "When my program dumped core, it said something about a segmentation fault. What is that?"
-msgstr "Когда моя программа сбросила core, она сообщила что-то о segmentation fault. Что это?"
+msgstr ""
+"Когда моя программа сбросила core, она сообщила что-то о segmentation fault. "
+"Что это?"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:377
@@ -1235,8 +1242,8 @@ msgid ""
"UNIX(R) compilers often put string literals like `\"My string\"` into read-"
"only areas of memory."
msgstr ""
-"Версии UNIX(R) компиляторы часто помещают строковые литералы, такие как "
-"`\"Моя строка\"`, в области памяти только для чтения."
+"Версии UNIX(R) компиляторы часто помещают строковые литералы, такие как `"
+"\"Моя строка\"`, в области памяти только для чтения."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:416
@@ -1287,7 +1294,10 @@ msgstr ""
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:436
#, no-wrap
msgid "Sometimes when I get a core dump it says bus error. It says in my UNIX(R) book that this means a hardware problem, but the computer still seems to be working. Is this true?"
-msgstr "Иногда при получении дампа памяти я вижу сообщение ошибки шины (bus error). В моей книге по UNIX(R) сказано, что это означает аппаратную проблему, но компьютер продолжает работать. Это правда?"
+msgstr ""
+"Иногда при получении дампа памяти я вижу сообщение ошибки шины (bus error). "
+"В моей книге по UNIX(R) сказано, что это означает аппаратную проблему, но "
+"компьютер продолжает работать. Это правда?"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:440
@@ -1304,7 +1314,10 @@ msgstr ""
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:441
#, no-wrap
msgid "This dumping core business sounds as though it could be quite useful, if I can make it happen when I want to. Can I do this, or do I have to wait until there is an error?"
-msgstr "Этот процесс создания дампа памяти звучит довольно полезно, если я могу запускать его по своему желанию. Могу ли я это сделать, или нужно ждать возникновения ошибки?"
+msgstr ""
+"Этот процесс создания дампа памяти звучит довольно полезно, если я могу "
+"запускать его по своему желанию. Могу ли я это сделать, или нужно ждать "
+"возникновения ошибки?"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:444
@@ -1470,34 +1483,34 @@ msgid ""
"This program is called `make`. It reads in a file, called a _makefile_, "
"that tells it how different files depend on each other, and works out which "
"files need to be re-compiled and which ones do not. For example, a rule "
-"could say something like \"if [.filename]#fromboz.o# is older than "
-"[.filename]#fromboz.c#, that means someone must have changed "
-"[.filename]#fromboz.c#, so it needs to be re-compiled.\" The makefile also "
-"has rules telling make _how_ to re-compile the source file, making it a much "
+"could say something like \"if [.filename]#fromboz.o# is older than [."
+"filename]#fromboz.c#, that means someone must have changed [."
+"filename]#fromboz.c#, so it needs to be re-compiled.\" The makefile also has "
+"rules telling make _how_ to re-compile the source file, making it a much "
"more powerful tool."
msgstr ""
"Эта программа называется `make`. Она читает файл, называемый _makefile_, "
"который указывает, как различные файлы зависят друг от друга, и определяет, "
"какие файлы нужно перекомпилировать, а какие нет. Например, правило может "
-"звучать так: «если [.filename]#fromboz.o# старше, чем "
-"[.filename]#fromboz.c#, значит, кто-то изменил [.filename]#fromboz.c#, и его "
-"нужно перекомпилировать». В makefile также содержатся правила, указывающие "
-"make, _как_ именно перекомпилировать исходный файл, что делает эту программу "
+"звучать так: «если [.filename]#fromboz.o# старше, чем [.filename]#fromboz.c#"
+", значит, кто-то изменил [.filename]#fromboz.c#, и его нужно "
+"перекомпилировать». В makefile также содержатся правила, указывающие make, "
+"_как_ именно перекомпилировать исходный файл, что делает эту программу "
"гораздо более мощным инструментом."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:507
msgid ""
"Makefiles are typically kept in the same directory as the source they apply "
-"to, and can be called [.filename]#makefile#, [.filename]#Makefile# or "
-"[.filename]#MAKEFILE#. Most programmers use the name [.filename]#Makefile#, "
+"to, and can be called [.filename]#makefile#, [.filename]#Makefile# or [."
+"filename]#MAKEFILE#. Most programmers use the name [.filename]#Makefile#, "
"as this puts it near the top of a directory listing, where it can easily be "
"seen.footnote:[They do not use the MAKEFILE form as block capitals are often "
"used for documentation files like README.]"
msgstr ""
"Файлы Makefile обычно хранятся в том же каталоге, что и исходный код, к "
-"которому они применяются, и могут называться [.filename]#makefile#, "
-"[.filename]#Makefile# или [.filename]#MAKEFILE#. Большинство программистов "
+"которому они применяются, и могут называться [.filename]#makefile#, [."
+"filename]#Makefile# или [.filename]#MAKEFILE#. Большинство программистов "
"используют имя [.filename]#Makefile#, так как это помещает его в начало "
"списка файлов в каталоге, где его легко заметить.footnote:[Они не используют "
"форму MAKEFILE, так как заглавные буквы часто применяются для файлов "
@@ -1537,21 +1550,20 @@ msgid ""
"_target_), followed by a colon, then whitespace, then the name of the source "
"file. When `make` reads this line, it looks to see if [.filename]#foo# "
"exists; if it exists, it compares the time [.filename]#foo# was last "
-"modified to the time [.filename]#foo.c# was last modified. If "
-"[.filename]#foo# does not exist, or is older than [.filename]#foo.c#, it "
-"then looks at the creation line to find out what to do. In other words, "
-"this is the rule for working out when [.filename]#foo.c# needs to be re-"
-"compiled."
+"modified to the time [.filename]#foo.c# was last modified. If [."
+"filename]#foo# does not exist, or is older than [.filename]#foo.c#, it then "
+"looks at the creation line to find out what to do. In other words, this is "
+"the rule for working out when [.filename]#foo.c# needs to be re-compiled."
msgstr ""
"Строка зависимости здесь состоит из имени программы (известного как _цель_), "
"за которым следует двоеточие, пробел и имя исходного файла. Когда `make` "
"читает эту строку, он проверяет, существует ли файл [.filename]#foo#; если "
-"он существует, программа сравнивает время последнего изменения файла "
-"[.filename]#foo# с временем последнего изменения файла [.filename]#foo.c#. "
-"Если файл [.filename]#foo# не существует или старше файла "
-"[.filename]#foo.c#, программа смотрит на строку создания, чтобы выяснить, "
-"что делать. Другими словами, это правило для определения, когда файл "
-"[.filename]#foo.c# нужно перекомпилировать."
+"он существует, программа сравнивает время последнего изменения файла [."
+"filename]#foo# с временем последнего изменения файла [.filename]#foo.c#. "
+"Если файл [.filename]#foo# не существует или старше файла [.filename]#foo.c#"
+", программа смотрит на строку создания, чтобы выяснить, что делать. Другими "
+"словами, это правило для определения, когда файл [.filename]#foo.c# нужно "
+"перекомпилировать."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:530
@@ -1637,8 +1649,8 @@ msgid ""
msgstr ""
"Если мы просто введем `make` без параметров, make всегда будет обращаться к "
"первой цели и затем остановится, не рассматривая остальные. Поэтому если мы "
-"введем `make` здесь, он просто перейдет к цели `foo`, перекомпилирует "
-"[.filename]#foo# при необходимости и затем остановится, не переходя к цели "
+"введем `make` здесь, он просто перейдет к цели `foo`, перекомпилирует [."
+"filename]#foo# при необходимости и затем остановится, не переходя к цели "
"`install`."
#. type: Plain text
@@ -1646,15 +1658,15 @@ msgstr ""
msgid ""
"Notice that the `install` target does not actually depend on anything! This "
"means that the command on the following line is always executed when we try "
-"to make that target by typing `make install`. In this case, it will copy "
-"[.filename]#foo# into the user's home directory. This is often used by "
+"to make that target by typing `make install`. In this case, it will copy [."
+"filename]#foo# into the user's home directory. This is often used by "
"application makefiles, so that the application can be installed in the "
"correct directory when it has been correctly compiled."
msgstr ""
"Обратите внимание, что цель `install` не зависит ни от чего! Это означает, "
"что команда в следующей строке всегда выполняется при попытке создать эту "
-"цель с помощью команды `make install`. В данном случае она скопирует "
-"[.filename]#foo# в домашний каталог пользователя. Это часто используется в "
+"цель с помощью команды `make install`. В данном случае она скопирует [."
+"filename]#foo# в домашний каталог пользователя. Это часто используется в "
"makefile приложений, чтобы приложение можно было установить в правильный "
"каталог после успешной компиляции."
@@ -1714,8 +1726,8 @@ msgid ""
"To make sure that this file is recompiled the moment [.filename]#foo.h# is "
"changed, you have to add it in your [.filename]#Makefile#:"
msgstr ""
-"Чтобы убедиться, что этот файл перекомпилируется при изменении "
-"[.filename]#foo.h#, необходимо добавить его в [.filename]#Makefile#:"
+"Чтобы убедиться, что этот файл перекомпилируется при изменении [."
+"filename]#foo.h#, необходимо добавить его в [.filename]#Makefile#:"
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:587
@@ -1833,14 +1845,14 @@ msgstr ""
"Теперь, если мы перейдем в каталог этого порта и наберем `make`, произойдет "
"следующее:"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:633
msgid ""
"A check is made to see if the source code for this port is already on the "
"system."
msgstr "Проверяется, есть ли исходный код этого порта уже в системе."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:634
msgid ""
"If it is not, an FTP connection to the URL in MASTER_SITES is set up to "
@@ -1849,7 +1861,7 @@ msgstr ""
"Если это не так, устанавливается FTP-соединение с URL в MASTER_SITES для "
"загрузки исходного кода."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:635
msgid ""
"The checksum for the source is calculated and compared it with one for a "
@@ -1860,7 +1872,7 @@ msgstr ""
"суммой известной и хорошей копии исходного кода. Это делается для того, "
"чтобы убедиться, что исходный код не был поврежден во время передачи."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:636
msgid ""
"Any changes required to make the source work on FreeBSD are applied-this is "
@@ -1869,7 +1881,7 @@ msgstr ""
"Все необходимые изменения для адаптации исходного кода к работе в FreeBSD "
"применяются — это называется применением _патча_."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:637
msgid ""
"Any special configuration needed for the source is done. (Many UNIX(R) "
@@ -1877,12 +1889,12 @@ msgid ""
"being compiled on and which optional UNIX(R) features are present-this is "
"where they are given the information in the FreeBSD ports scenario)."
msgstr ""
-"Любая необходимая специальная настройка для исходного кода выполнена. "
-"(Многие дистрибутивы программ UNIX(R) пытаются определить, на какой версии "
+"Любая необходимая специальная настройка для исходного кода выполнена. ("
+"Многие дистрибутивы программ UNIX(R) пытаются определить, на какой версии "
"UNIX(R) они компилируются и какие дополнительные функции UNIX(R) доступны — "
"именно здесь они получают эту информацию в сценарии портов FreeBSD)."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:638
msgid ""
"The source code for the program is compiled. In effect, we change to the "
@@ -1893,7 +1905,7 @@ msgstr ""
"были распакованы исходные файлы, и выполняем `make` — собственный make-файл "
"программы содержит необходимую информацию для сборки программы."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:639
msgid ""
"We now have a compiled version of the program. If we wish, we can test it "
@@ -1910,7 +1922,7 @@ msgstr ""
"данных пакетов`, чтобы позже можно было легко удалить порт, если мы "
"передумаем."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:641
msgid ""
"Now I think you will agree that is rather impressive for a four line script!"
@@ -1918,7 +1930,7 @@ msgstr ""
"Вот теперь, я думаю, вы согласитесь, что это довольно впечатляюще для "
"скрипта из четырёх строк!"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:645
msgid ""
"The secret lies in the last line, which tells `make` to look in the system "
@@ -1933,20 +1945,20 @@ msgstr ""
"системному makefile под названием [.filename]#bsd.port.mk#. Эту строку легко "
"пропустить, но именно здесь начинается вся магия — кто-то написал makefile, "
"который предписывает `make` выполнить все вышеперечисленные действия (плюс "
-"несколько других, которые я не упомянул, включая обработку возможных "
-"ошибок), и любой может получить доступ к этому функционалу, просто добавив "
-"одну строку в свой собственный makefile!"
+"несколько других, которые я не упомянул, включая обработку возможных ошибок)"
+", и любой может получить доступ к этому функционалу, просто добавив одну "
+"строку в свой собственный makefile!"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:649
msgid ""
-"If you want to have a look at these system makefiles, they are in "
-"[.filename]#/usr/share/mk#, but it is probably best to wait until you have "
-"had a bit of practice with makefiles, as they are very complicated (and if "
-"you do look at them, make sure you have a flask of strong coffee handy!)"
+"If you want to have a look at these system makefiles, they are in [."
+"filename]#/usr/share/mk#, but it is probably best to wait until you have had "
+"a bit of practice with makefiles, as they are very complicated (and if you "
+"do look at them, make sure you have a flask of strong coffee handy!)"
msgstr ""
-"Если вы хотите взглянуть на эти системные makefile-ы, они находятся в "
-"[.filename]#/usr/share/mk#, но, вероятно, лучше подождать, пока у вас не "
+"Если вы хотите взглянуть на эти системные makefile-ы, они находятся в [."
+"filename]#/usr/share/mk#, но, вероятно, лучше подождать, пока у вас не "
"появится немного практики с makefile, так как они очень сложные (и если вы "
"всё же решите их посмотреть, убедитесь, что у вас под рукой есть фляга "
"крепкого кофе!)"
@@ -1957,7 +1969,7 @@ msgstr ""
msgid "More Advanced Uses of `make`"
msgstr "Более сложные способы использования `make`"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:656
msgid ""
"`Make` is a very powerful tool, and can do much more than the simple example "
@@ -1972,11 +1984,10 @@ msgstr ""
"показано в простом примере выше. К сожалению, существует несколько различных "
"версий `make`, и все они значительно отличаются друг от друга. Лучший способ "
"узнать, на что они способны, — вероятно, прочитать документацию. Надеюсь, "
-"это введение дало вам основу, с которой вы сможете это сделать. В "
-"man:make[1] подробно обсуждаются переменные, аргументы и то, как "
-"использовать `make`."
+"это введение дало вам основу, с которой вы сможете это сделать. В man:make[1]"
+" подробно обсуждаются переменные, аргументы и то, как использовать `make`."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:660
msgid ""
"Many applications in the ports use GNU make, which has a very good set of "
@@ -1989,7 +2000,7 @@ msgstr ""
"будет автоматически установлен как `gmake`. Он также доступен как отдельный "
"порт и пакет."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:663
msgid ""
"To view the info pages for GNU make, you will have to edit [.filename]#dir# "
@@ -1997,8 +2008,8 @@ msgid ""
"involves adding a line like"
msgstr ""
"Для просмотра справочных страниц (info) GNU make вам потребуется "
-"отредактировать файл [.filename]#dir# в каталоге [.filename]#/usr/local/"
-"info#, добавив соответствующую запись. Добавьте строку"
+"отредактировать файл [.filename]#dir# в каталоге [.filename]#/usr/local/info#"
+", добавив соответствующую запись. Добавьте строку"
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:667
@@ -2009,11 +2020,11 @@ msgstr " * Make: (make). The GNU Make utility.\n"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:670
msgid ""
-"to the file. Once you have done this, you can type `info` and then select "
-"[.guimenuitem]#make# from the menu (or in Emacs, do `C-h i`)."
+"to the file. Once you have done this, you can type `info` and then select [."
+"guimenuitem]#make# from the menu (or in Emacs, do `C-h i`)."
msgstr ""
-"в файл. После этого вы можете ввести `info` и затем выбрать "
-"[.guimenuitem]#make# из меню (или в Emacs выполнить `C-h i`)."
+"в файл. После этого вы можете ввести `info` и затем выбрать [."
+"guimenuitem]#make# из меню (или в Emacs выполнить `C-h i`)."
#. type: Title ==
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:672
@@ -2202,8 +2213,8 @@ msgid ""
"use `up` and `down` to take a quick look at the caller."
msgstr ""
"Для пошагового выполнения программы строка за строкой введите `thread step-"
-"over`. Когда программа дойдёт до вызова функции, войдите в неё, набрав "
-"`thread step-in`. Оказавшись внутри вызова функции, вернитесь из него с "
+"over`. Когда программа дойдёт до вызова функции, войдите в неё, набрав `"
+"thread step-in`. Оказавшись внутри вызова функции, вернитесь из него с "
"помощью команды `thread step-out` или используйте `up` и `down`, чтобы "
"быстро посмотреть на вызывающий код."
@@ -2512,23 +2523,23 @@ msgid ""
"process when it crashed. In \"the good old days\", programmers had to print "
"out hex listings of core files and sweat over machine code manuals, but now "
"life is a bit easier. Incidentally, under FreeBSD and other 4.4BSD systems, "
-"a core file is called [.filename]#progname.core# instead of just "
-"[.filename]#core#, to make it clearer which program a core file belongs to."
+"a core file is called [.filename]#progname.core# instead of just [."
+"filename]#core#, to make it clearer which program a core file belongs to."
msgstr ""
"Файл core — это, по сути, файл, содержащий полное состояние процесса на "
"момент его аварийного завершения. В «старые добрые времена» программистам "
"приходилось распечатывать шестнадцатеричные дампы файлов core и корпеть над "
"руководствами по машинному коду, но сейчас жизнь стала немного проще. "
-"Кстати, в FreeBSD и других системах на базе 4.4BSD файл core называется "
-"[.filename]#progname.core#, а не просто [.filename]#core#, чтобы было "
+"Кстати, в FreeBSD и других системах на базе 4.4BSD файл core называется [."
+"filename]#progname.core#, а не просто [.filename]#core#, чтобы было "
"понятнее, какой программе он принадлежит."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:873
msgid ""
"To examine a core file, specify the name of the core file in addition to the "
-"program itself. Instead of starting up `lldb` in the usual way, type `lldb "
-"-c _progname_.core \\-- _progname_`."
+"program itself. Instead of starting up `lldb` in the usual way, type `lldb -"
+"c _progname_.core \\-- _progname_`."
msgstr ""
"Для анализа файла core укажите имя файла core в дополнение к самой "
"программе. Вместо обычного запуска `lldb` введите `lldb -c "
@@ -2648,8 +2659,8 @@ msgid ""
"to do something like the following (courtesy of the `gdb` info pages):"
msgstr ""
"Для того чтобы это работало правильно, код, который вызывает `fork` для "
-"создания дочернего процесса, должен делать что-то вроде следующего "
-"(предоставлено из документации `gdb`):"
+"создания дочернего процесса, должен делать что-то вроде следующего ("
+"предоставлено из документации `gdb`):"
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:927
@@ -2711,8 +2722,8 @@ msgid ""
msgstr ""
"Описанная функциональность доступна начиная с версии LLDB 12.0.0. "
"Пользователи релизов FreeBSD, содержащих более раннюю версию LLDB, могут "
-"воспользоваться снимком из extref:{handbook}[портов или пакетов, ports-"
-"using], как package:devel/llvm-devel[]."
+"воспользоваться снимком из extref:{handbook}[портов или пакетов, ports-using]"
+", как package:devel/llvm-devel[]."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:947
@@ -3232,8 +3243,7 @@ msgstr "Вы можете компилировать и отлаживать п
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1208
msgid ""
"On a compilation error, you can jump to the offending line of source code."
-msgstr ""
-"При ошибке компиляции можно перейти к проблемной строке исходного кода."
+msgstr "При ошибке компиляции можно перейти к проблемной строке исходного кода."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1209
@@ -3270,8 +3280,8 @@ msgstr ""
msgid ""
"Once it is installed, start it up and do `C-h t` to read an Emacs tutorial-"
"that means hold down kbd:[control], press kbd:[h], let go of kbd:[control], "
-"and then press kbd:[t]. (Alternatively, you can use the mouse to select "
-"[.guimenuitem]#Emacs Tutorial# from the menu:Help[] menu.)"
+"and then press kbd:[t]. (Alternatively, you can use the mouse to select [."
+"guimenuitem]#Emacs Tutorial# from the menu:Help[] menu.)"
msgstr ""
"После установки запустите его и выполните `C-h t`, чтобы прочитать "
"руководство по Emacs — это означает, что нужно удерживать kbd:[control], "
@@ -3286,9 +3296,9 @@ msgid ""
"as it is much quicker when you are editing something to press a couple of "
"keys than to try to find the mouse and then click on the right place. And, "
"when you are talking to seasoned Emacs users, you will find they often "
-"casually throw around expressions like \"`M-x replace-s RET foo RET bar "
-"RET`\" so it is useful to know what they mean. And in any case, Emacs has "
-"far too many useful functions for them to all fit on the menu bars."
+"casually throw around expressions like \"`M-x replace-s RET foo RET bar RET`"
+"\" so it is useful to know what they mean. And in any case, Emacs has far "
+"too many useful functions for them to all fit on the menu bars."
msgstr ""
"Хотя в Emacs и есть меню, стоит изучить сочетания клавиш, так как "
"редактировать что-либо с их помощью гораздо быстрее, чем искать мышку и "
@@ -3315,16 +3325,16 @@ msgstr ""
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1229
msgid ""
-"If you cannot remember what a particular combination of keys does, select "
-"[.guimenuitem]#Describe Key# from the menu:Help[] menu and type it in-Emacs "
+"If you cannot remember what a particular combination of keys does, select [."
+"guimenuitem]#Describe Key# from the menu:Help[] menu and type it in-Emacs "
"will tell you what it does. You can also use the [.guimenuitem]#Command "
"Apropos# menu item to find out all the commands which contain a particular "
"word in them, with the key binding next to it."
msgstr ""
"Если вы не можете вспомнить, что делает определённая комбинация клавиш, "
"выберите [.guimenuitem]#Описание Клавиши# в меню menu:Help[] и введите её — "
-"Emacs сообщит, что она делает. Вы также можете использовать пункт меню "
-"[.guimenuitem]#Command Apropos#, чтобы найти все команды, содержащие "
+"Emacs сообщит, что она делает. Вы также можете использовать пункт меню [."
+"guimenuitem]#Command Apropos#, чтобы найти все команды, содержащие "
"определённое слово, с указанием соответствующих клавишных сочетаний."
#. type: Plain text
@@ -3339,13 +3349,12 @@ msgid ""
"operation you have just requested."
msgstr ""
"Между прочим, выражение выше означает: удерживайте клавишу kbd:[Meta], "
-"нажмите kbd:[x], отпустите клавишу kbd:[Meta], введите `replace-s` "
-"(сокращение от `replace-string` — ещё одна особенность Emacs в том, что "
-"команды можно сокращать), нажмите клавишу kbd:[return], введите `foo` "
-"(строка, которую нужно заменить), нажмите клавишу kbd:[return], введите "
-"`bar` (строка, на которую нужно заменить `foo`) и снова нажмите kbd:"
-"[return]. Emacs выполнит операцию поиска и замены, которую вы только что "
-"запросили."
+"нажмите kbd:[x], отпустите клавишу kbd:[Meta], введите `replace-s` ("
+"сокращение от `replace-string` — ещё одна особенность Emacs в том, что "
+"команды можно сокращать), нажмите клавишу kbd:[return], введите `foo` ("
+"строка, которую нужно заменить), нажмите клавишу kbd:[return], введите `bar` "
+"(строка, на которую нужно заменить `foo`) и снова нажмите kbd:[return]. "
+"Emacs выполнит операцию поиска и замены, которую вы только что запросили."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1235
@@ -3356,8 +3365,8 @@ msgid ""
msgstr ""
"Если вам интересно, что такое kbd:[Meta], то это специальная клавиша, "
"которая есть на многих рабочих станциях UNIX(R). К сожалению, на PC её нет, "
-"поэтому обычно используется kbd:[alt] (или, если вам не повезло, kbd:"
-"[escape])."
+"поэтому обычно используется kbd:[alt] (или, если вам не повезло, "
+"kbd:[escape])."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1239
@@ -3411,8 +3420,8 @@ msgstr ""
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1249
msgid ""
-"The best way to learn Emacs Lisp is to read the online link:https://"
-"www.gnu.org/software/emacs/manual/elisp.html[Emacs Reference] manual."
+"The best way to learn Emacs Lisp is to read the online link:https://www.gnu."
+"org/software/emacs/manual/elisp.html[Emacs Reference] manual."
msgstr ""
"Лучший способ изучить Emacs Lisp — это прочитать онлайн-руководство "
"link:https://www.gnu.org/software/emacs/manual/elisp.html[Emacs Reference]."
@@ -3456,16 +3465,16 @@ msgstr "Всё, что начинается с `;`, является комме
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1261
msgid ""
-"In the first line, the `-*- Emacs-Lisp -*-` is so that we can edit "
-"[.filename]#.emacs# itself within Emacs and get all the fancy features for "
+"In the first line, the `-*- Emacs-Lisp -*-` is so that we can edit [."
+"filename]#.emacs# itself within Emacs and get all the fancy features for "
"editing Emacs Lisp. Emacs usually tries to guess this based on the filename, "
"and may not get it right for [.filename]#.emacs#."
msgstr ""
"В первой строке `-*- Emacs-Lisp -*-` нужен для того, чтобы мы могли "
"редактировать сам файл [.filename]#.emacs# в Emacs и использовать все "
"удобные функции для редактирования Emacs Lisp. Обычно Emacs пытается угадать "
-"это по имени файла, но может не сделать это правильно для "
-"[.filename]#.emacs#."
+"это по имени файла, но может не сделать это правильно для [.filename]#."
+"emacs#."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/tools/_index.adoc:1262
@@ -4268,8 +4277,8 @@ msgid ""
"these files by doing"
msgstr ""
"Первое, что нужно сделать, — это выяснить, поставляются ли с whizbang какие-"
-"либо файлы, сообщающие Emacs о языке. Обычно они заканчиваются на "
-"[.filename]#.el#, что означает \"Emacs Lisp\". Например, если whizbang "
+"либо файлы, сообщающие Emacs о языке. Обычно они заканчиваются на [."
+"filename]#.el#, что означает \"Emacs Lisp\". Например, если whizbang "
"является портом FreeBSD, мы можем найти эти файлы, выполнив"
#. type: delimited block . 4
diff --git a/documentation/content/ru/books/developers-handbook/x86/_index.adoc b/documentation/content/ru/books/developers-handbook/x86/_index.adoc
index c44f67bb5c..c4a63de15f 100644
--- a/documentation/content/ru/books/developers-handbook/x86/_index.adoc
+++ b/documentation/content/ru/books/developers-handbook/x86/_index.adoc
@@ -1,11 +1,11 @@
---
-authors:
+authors: ~
description: 'Программирование на ассемблере x86'
next: books/developers-handbook/partv
params:
path: /books/developers-handbook/x86/
prev: books/developers-handbook/partiv
-showBookMenu: true
+showBookMenu: 'true'
tags: ["x86", "guide"]
title: 'Глава 11. Программирование на языке ассемблера для x86'
weight: 15
@@ -1674,7 +1674,7 @@ UNIX(R) позволяет нам отображать файл или его ч
Поскольку наша программа может объединять последовательности возврата каретки / перевода строки в простые переводы строк, наш вывод может быть меньше, чем ввод. Однако, так как мы помещаем вывод в тот же файл, из которого читаем ввод, нам может потребоваться изменить размер файла.
-Системный вызов `ftruncate` позволяет нам сделать именно это. Несмотря на название , несколько вводящее в звблуждение, системный вызов `ftruncate` может использоваться как для усечения файла (уменьшения его размера), так и для его увеличения.
+Системный вызов `ftruncate` позволяет нам сделать именно это. Несмотря на название , несколько вводящее в заблуждение, системный вызов `ftruncate` может использоваться как для усечения файла (уменьшения его размера), так и для его увеличения.
И да, мы найдем две версии `ftruncate` в [.filename]#syscalls.master#, старую (130) и новую (201). Мы будем использовать новую:
diff --git a/documentation/content/ru/books/developers-handbook/x86/_index.po b/documentation/content/ru/books/developers-handbook/x86/_index.po
index 325770cdce..da7f8885be 100644
--- a/documentation/content/ru/books/developers-handbook/x86/_index.po
+++ b/documentation/content/ru/books/developers-handbook/x86/_index.po
@@ -5,8 +5,8 @@
msgid ""
msgstr ""
"Project-Id-Version: FreeBSD Documentation VERSION\n"
-"POT-Creation-Date: 2025-10-12 22:16+0300\n"
-"PO-Revision-Date: 2025-09-26 04:45+0000\n"
+"POT-Creation-Date: 2025-05-01 19:56-0300\n"
+"PO-Revision-Date: 2025-10-29 04:45+0000\n"
"Last-Translator: Vladlen Popolitov <vladlenpopolitov@list.ru>\n"
"Language-Team: Russian <https://translate-dev.freebsd.org/projects/"
"documentation/booksdevelopers-handbookx86_index/ru/>\n"
@@ -25,7 +25,7 @@ msgstr ""
msgid "x86 Assembly Language Programming"
msgstr "Программирование на ассемблере x86"
-#. type: Yaml Front Matter Hash Value: title
+#. type: YAML Front Matter: title
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1
#, no-wrap
msgid "Chapter 11. x86 Assembly Language Programming"
@@ -482,8 +482,8 @@ msgid ""
"other convention implemented in the Linux emulation mode, read [.filename]#/"
"usr/src/sys/i386/linux/syscalls.master#."
msgstr ""
-"Основной файл для стандартного соглашения о вызовах UNIX(R) можно найти в "
-"[.filename]#/usr/src/sys/kern/syscalls.master#. Если вам необходимо "
+"Основной файл для стандартного соглашения о вызовах UNIX(R) можно найти в [."
+"filename]#/usr/src/sys/kern/syscalls.master#. Если вам необходимо "
"использовать другое соглашение, реализованное в режиме эмуляции Linux, "
"обратитесь к [.filename]#/usr/src/sys/i386/linux/syscalls.master#."
@@ -499,8 +499,7 @@ msgstr ""
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:218
msgid "[.filename]#syscalls.master# describes how the call is to be made:"
-msgstr ""
-"[.filename]#syscalls.master# описывает, как должен быть выполнен вызов:"
+msgstr "[.filename]#syscalls.master# описывает, как должен быть выполнен вызов:"
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:229
@@ -599,7 +598,7 @@ msgstr ""
msgid "For example, man:open[2] says:"
msgstr "Например, man:open[2] говорит:"
-#. type: .blockquote
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:258
msgid ""
"If successful, `open()` returns a non-negative integer, termed a file "
@@ -610,7 +609,7 @@ msgstr ""
"файловым дескриптором. В случае ошибки возвращается `-1`, а переменной "
"`errno` присваивается код ошибки."
-#. type: .blockquote
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:260
msgid ""
"The assembly language programmer new to UNIX(R) and FreeBSD will immediately "
@@ -712,8 +711,8 @@ msgid ""
"When using the standard FreeBSD calling convention, the `carry flag` is "
"cleared upon success, set upon failure."
msgstr ""
-"При использовании стандартного соглашения о вызовах FreeBSD флаг `carry "
-"flag` сбрасывается при успехе и устанавливается при неудаче."
+"При использовании стандартного соглашения о вызовах FreeBSD флаг `carry flag`"
+" сбрасывается при успехе и устанавливается при неудаче."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:305
@@ -1325,9 +1324,8 @@ msgid ""
"Go ahead, enter it into your editor and save it as [.filename]#system.inc#. "
"We will add more to it as we discuss more syscalls."
msgstr ""
-"Продолжайте, введите это в ваш редактор и сохраните как "
-"[.filename]#system.inc#. Мы добавим больше по мере обсуждения дополнительных "
-"системных вызовов."
+"Продолжайте, введите это в ваш редактор и сохраните как [.filename]#system."
+"inc#. Мы добавим больше по мере обсуждения дополнительных системных вызовов."
#. type: Title ==
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:539
@@ -1394,8 +1392,8 @@ msgid ""
"Here is what it does: Line 1 includes the defines, the macros, and the code "
"from [.filename]#system.inc#."
msgstr ""
-"Вот что он делает: Строка 1 включает определения, макросы и код из файла "
-"[.filename]#system.inc#."
+"Вот что он делает: Строка 1 включает определения, макросы и код из файла [."
+"filename]#system.inc#."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:568
@@ -1406,9 +1404,8 @@ msgid ""
"bytes."
msgstr ""
"Строки 3-5 содержат данные: строка 3 начинает раздел/сегмент данных. Строка "
-"4 содержит строку \"Hello, World!\", за которой следует новая строка "
-"(`0Ah`). Строка 5 создает константу, содержащую длину строки из строки 4 в "
-"байтах."
+"4 содержит строку \"Hello, World!\", за которой следует новая строка (`0Ah`)"
+". Строка 5 создает константу, содержащую длину строки из строки 4 в байтах."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:572
@@ -1456,8 +1453,8 @@ msgstr ""
"Если вы перешли на UNIX(R) с опытом программирования на ассемблере для MS-"
"DOS(R), вы, возможно, привыкли писать напрямую в видеопамять. В FreeBSD или "
"любой другой разновидности UNIX(R) вам не придётся об этом беспокоиться. С "
-"вашей точки зрения, вы записываете данные в файл под названием "
-"[.filename]#stdout#. Это может быть экран, терминал telnet, обычный файл или "
+"вашей точки зрения, вы записываете данные в файл под названием [."
+"filename]#stdout#. Это может быть экран, терминал telnet, обычный файл или "
"даже входные данные другой программы. Определять, что именно это будет, — "
"задача системы."
@@ -1473,8 +1470,8 @@ msgid ""
"Type the code in an editor, and save it in a file named "
"[.filename]#hello.asm#. You need nasm to assemble it."
msgstr ""
-"Наберите код в редакторе и сохраните его в файле с именем "
-"[.filename]#hello.asm#. Для сборки вам понадобится nasm."
+"Наберите код в редакторе и сохраните его в файле с именем [.filename]#hello."
+"asm#. Для сборки вам понадобится nasm."
#. type: Title ====
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:594
@@ -1530,9 +1527,9 @@ msgid ""
"sourceforge.net/projects/nasm[home page]. You can still use it to assemble "
"FreeBSD code."
msgstr ""
-"Если ваша система не FreeBSD, вам нужно получить nasm с его https://"
-"sourceforge.net/projects/nasm[домашней страницы]. Вы по-прежнему можете "
-"использовать его для ассемблирования кода FreeBSD."
+"Если ваша система не FreeBSD, вам нужно получить nasm с его "
+"https://sourceforge.net/projects/nasm[домашней страницы]. Вы по-прежнему "
+"можете использовать его для ассемблирования кода FreeBSD."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:619
@@ -1580,8 +1577,8 @@ msgid ""
"convert each byte of its input into a hexadecimal number followed by a blank "
"space."
msgstr ""
-"В этой главе мы разработаем простой фильтр и научимся читать из "
-"[.filename]#stdin# и писать в [.filename]#stdout#. Этот фильтр будет "
+"В этой главе мы разработаем простой фильтр и научимся читать из [."
+"filename]#stdin# и писать в [.filename]#stdout#. Этот фильтр будет "
"преобразовывать каждый байт входных данных в шестнадцатеричное число, за "
"которым следует пробел."
@@ -2023,8 +2020,8 @@ msgid ""
"[.filename]#stdout#."
msgstr ""
"Мы также создаем выходной буфер. Мы сохраняем наш вывод в нем, пока он не "
-"заполнится. В этот момент мы просим ядро записать содержимое буфера в "
-"[.filename]#stdout#."
+"заполнится. В этот момент мы просим ядро записать содержимое буфера в [."
+"filename]#stdout#."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:820
@@ -2036,8 +2033,8 @@ msgid ""
"some of your output is missing."
msgstr ""
"Программа завершается, когда больше нет входных данных. Но нам всё ещё нужно "
-"попросить ядро записать содержимое нашего выходного буфера в "
-"[.filename]#stdout# в последний раз, иначе часть нашего вывода попадёт в "
+"попросить ядро записать содержимое нашего выходного буфера в [."
+"filename]#stdout# в последний раз, иначе часть нашего вывода попадёт в "
"буфер, но так и не будет отправлена. Не забудьте об этом, иначе будете "
"недоумевать, куда пропала часть вывода."
@@ -2486,8 +2483,8 @@ msgid ""
"processing. If it is followed by white space, or some other value, then it "
"is not part of the current token."
msgstr ""
-"Например, вы можете анализировать входной поток на наличие текстовой строки "
-"(например, при реализации компилятора языка): если символ следует за другим "
+"Например, вы можете анализировать входной поток на наличие текстовой строки ("
+"например, при реализации компилятора языка): если символ следует за другим "
"символом или, возможно, цифрой, он является частью обрабатываемой лексемы. "
"Если за ним следует пробел или другое значение, то он не является частью "
"текущей лексемы."
@@ -2711,9 +2708,9 @@ msgid ""
"(the first call will still be within the buffer, the remaining 16 may be "
"either within the buffer or within the \"spare\")."
msgstr ""
-"С этим изменением вы можете безопасно вызывать `ungetc` до 17 раз подряд "
-"(первый вызов всё ещё будет в пределах буфера, остальные 16 могут быть либо "
-"в пределах буфера, либо в пределах \"запасного\" пространства)."
+"С этим изменением вы можете безопасно вызывать `ungetc` до 17 раз подряд ("
+"первый вызов всё ещё будет в пределах буфера, остальные 16 могут быть либо в "
+"пределах буфера, либо в пределах \"запасного\" пространства)."
#. type: Title ==
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1165
@@ -2800,9 +2797,9 @@ msgid ""
"[.filename]#hex.asm#. First, however, we need to add a few lines to "
"[.filename]#system.inc#:"
msgstr ""
-"Вооружившись этими знаниями, мы почти готовы к следующей версии "
-"[.filename]#hex.asm#. Однако сначала нам нужно добавить несколько строк в "
-"[.filename]#system.inc#:"
+"Вооружившись этими знаниями, мы почти готовы к следующей версии [."
+"filename]#hex.asm#. Однако сначала нам нужно добавить несколько строк в [."
+"filename]#system.inc#:"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1194
@@ -3130,8 +3127,8 @@ msgid ""
"In our `.data` section we now have two new variables, `fd.in` and `fd.out`. "
"We store the input and output file descriptors here."
msgstr ""
-"В нашем разделе `.data` теперь есть две новые переменные, `fd.in` и "
-"`fd.out`. Здесь мы сохраняем дескрипторы файлов для ввода и вывода."
+"В нашем разделе `.data` теперь есть две новые переменные, `fd.in` и `fd.out`"
+". Здесь мы сохраняем дескрипторы файлов для ввода и вывода."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1366
@@ -3139,8 +3136,8 @@ msgid ""
"In the `.text` section we have replaced the references to `stdin` and "
"`stdout` with `[fd.in]` and `[fd.out]`."
msgstr ""
-"В разделе `.text` мы заменили ссылки с `stdin` и `stdout` на `[fd.in]` и "
-"`[fd.out]`."
+"В разделе `.text` мы заменили ссылки с `stdin` и `stdout` на `[fd.in]` и `[fd"
+".out]`."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1369
@@ -3180,8 +3177,8 @@ msgstr ""
"указателей, так как мы можем обрабатывать NULL-указатели с помощью `jecxz`. "
"Если `argv[1]` не равен NULL, мы пытаемся открыть файл с именем, указанным в "
"первом аргументе. В противном случае продолжаем программу как раньше: чтение "
-"из `stdin`, запись в `stdout`. Если нам не удаётся открыть входной файл "
-"(например, он не существует), мы переходим к обработчику ошибок и завершаем "
+"из `stdin`, запись в `stdout`. Если нам не удаётся открыть входной файл ("
+"например, он не существует), мы переходим к обработчику ошибок и завершаем "
"работу."
#. type: Plain text
@@ -3463,7 +3460,8 @@ msgid ""
";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
"%include\t'system.inc'\n"
msgstr ""
-";;;;;;; webvars.asm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";;;;;;; webvars.asm "
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
";\n"
"; Copyright (c) 2000 G. Adam Stanislav\n"
"; All rights reserved.\n"
@@ -3479,23 +3477,28 @@ msgstr ""
";\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"
+"; 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"
+"; 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"
+"; HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, "
+"STRICT\n"
"; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY\n"
"; OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF\n"
"; SUCH DAMAGE.\n"
-";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
+";;\n"
";\n"
"; Version 1.0\n"
";\n"
"; Started:\t 8-Dec-2000\n"
"; Updated:\t 8-Dec-2000\n"
";\n"
-";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
+";;\n"
"%include\t'system.inc'\n"
#. type: delimited block . 4
@@ -3556,7 +3559,8 @@ msgstr ""
"\tdb\t'<h1>Web Environment</h1>', 0Ah\n"
"\tdb\t'<p>The following <b>environment variables</b> are defined '\n"
"\tdb\t'on this web server:</p>', 0Ah, 0Ah\n"
-"\tdb\t'<table align=\"center\" width=\"80\" border=\"0\" cellpadding=\"10\" '\n"
+"\tdb\t'<table align=\"center\" width=\"80\" border=\"0\" cellpadding=\"10\" '"
+"\n"
"\tdb\t'cellspacing=\"0\" class=\"webvars\">', 0Ah\n"
"httplen\tequ\t$-http\n"
"left\tdb\t'<tr>', 0Ah\n"
@@ -3963,12 +3967,12 @@ msgid ""
"UNIX(R). It saves the output in a different file. Optionally, it converts "
"a UNIX(R) text file to a DOS text file."
msgstr ""
-"Одной из первых программ, которые я написал для UNIX(R), была link:ftp://"
-"ftp.int80h.org/unix/tuc/[tuc] — конвертер текста в файл UNIX(R). Она "
-"преобразует текстовый файл из других операционных систем в текстовый файл "
-"UNIX(R). Другими словами, она изменяет различные виды окончаний строк на "
-"стандартные для UNIX(R). Результат сохраняется в другом файле. По желанию, "
-"она может преобразовать текстовый файл UNIX(R) в текстовый файл DOS."
+"Одной из первых программ, которые я написал для UNIX(R), была link:ftp://ftp."
+"int80h.org/unix/tuc/[tuc] — конвертер текста в файл UNIX(R). Она преобразует "
+"текстовый файл из других операционных систем в текстовый файл UNIX(R). "
+"Другими словами, она изменяет различные виды окончаний строк на стандартные "
+"для UNIX(R). Результат сохраняется в другом файле. По желанию, она может "
+"преобразовать текстовый файл UNIX(R) в текстовый файл DOS."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1671
@@ -4083,8 +4087,8 @@ msgid ""
"It should also handle files that use some kind of a combination of the above "
"(e.g., carriage return followed by several line feeds)."
msgstr ""
-"Это также должно обрабатывать файлы, использующие комбинации вышеуказанного "
-"(например, возврат каретки с последующими несколькими переводами строки)."
+"Это также должно обрабатывать файлы, использующие комбинации вышеуказанного ("
+"например, возврат каретки с последующими несколькими переводами строки)."
#. type: Title ===
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1706
@@ -4607,9 +4611,9 @@ msgid ""
"www.int80h.org/cgi-bin/isbn?isbn=0130810819[Unix Network Programming, Volume "
"2, Chapter 12]."
msgstr ""
-"Для подробного изучения `mmap` см. http://www.int80h.org/cgi-bin/isbn?"
-"isbn=0130810819[Unix Network Programming, Volume 2, Chapter 12] У. Ричарда "
-"Стивенса."
+"Для подробного изучения `mmap` см. http://www.int80h.org/cgi-bin/"
+"isbn?isbn=0130810819[Unix Network Programming, Volume 2, Chapter 12] У. "
+"Ричарда Стивенса."
#. type: Title ===
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:1872
@@ -4673,8 +4677,8 @@ msgid ""
"indicating an error. After I changed the code to allocate the structure on "
"the stack, everything was working fine."
msgstr ""
-"Однако должен сказать, что я пытался объявить структуру `stat` в секции "
-"`.bss`, и `fstat` это не понравилось: был установлен флаг переноса, "
+"Однако должен сказать, что я пытался объявить структуру `stat` в секции `."
+"bss`, и `fstat` это не понравилось: был установлен флаг переноса, "
"указывающий на ошибку. После того как я изменил код, чтобы разместить "
"структуру в стеке, всё заработало как надо."
@@ -4705,7 +4709,7 @@ msgid ""
"the file (make it smaller) and to grow it."
msgstr ""
"Системный вызов `ftruncate` позволяет нам сделать именно это. Несмотря на "
-"название , несколько вводящее в звблуждение, системный вызов `ftruncate` "
+"название , несколько вводящее в заблуждение, системный вызов `ftruncate` "
"может использоваться как для усечения файла (уменьшения его размера), так и "
"для его увеличения."
@@ -4927,7 +4931,8 @@ msgid ""
";;;;;;; v.1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
"%include\t'system.inc'\n"
msgstr ""
-";;;;;;; Fast Text-to-Unix Conversion (ftuc.asm) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";;;;;;; Fast Text-to-Unix Conversion (ftuc.asm) "
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
";;\n"
";; Started:\t21-Dec-2000\n"
";; Updated:\t22-Dec-2000\n"
@@ -4935,7 +4940,8 @@ msgstr ""
";; Copyright 2000 G. Adam Stanislav.\n"
";; All rights reserved.\n"
";;\n"
-";;;;;;; v.1 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";;;;;;; v.1 "
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
"%include\t'system.inc'\n"
#. type: delimited block . 4
@@ -5852,7 +5858,8 @@ msgid ""
";\n"
";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
msgstr ""
-";;;;;;; csv.asm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";;;;;;; csv.asm "
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
";\n"
"; Convert a comma-separated file to a something-else separated file.\n"
";\n"
@@ -5862,7 +5869,8 @@ msgstr ""
"; Copyright (c) 2001 G. Adam Stanislav\n"
"; All rights reserved.\n"
";\n"
-";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
+";;\n"
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2349
@@ -5881,7 +5889,8 @@ msgstr ""
"section\t.data\n"
"fd.in\tdd\tstdin\n"
"fd.out\tdd\tstdout\n"
-"usg\tdb\t'Usage: csv [-t<delim>] [-c<comma>] [-p] [-o <outfile>] [-i <infile>]', 0Ah\n"
+"usg\tdb\t'Usage: csv [-t<delim>] [-c<comma>] [-p] [-o <outfile>] [-i "
+"<infile>]', 0Ah\n"
"usglen\tequ\t$-usg\n"
"iemsg\tdb\t\"csv: Can't open input file\", 0Ah\n"
"iemlen\tequ\t$-iemsg\n"
@@ -6552,20 +6561,19 @@ msgstr ""
msgid "Here is what might happen:"
msgstr "Вот что может произойти:"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2640
msgid "The image editor will load our filter using the C function `popen()`."
msgstr ""
"Редактор изображений загрузит наш фильтр, используя функцию `popen()` на "
"языке C."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2641
msgid "It will read the first row of pixels from a bitmap or pixmap."
-msgstr ""
-"Он прочитает первый ряд пикселей из битовой карты или пиксельной карты."
+msgstr "Он прочитает первый ряд пикселей из битовой карты или пиксельной карты."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2642
msgid ""
"It will write the first row of pixels to the _pipe_ leading to the `fd.in` "
@@ -6574,7 +6582,7 @@ msgstr ""
"Он запишет первую строку пикселей в _канал_, ведущий к `fd.in` нашего "
"фильтра."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2643
msgid ""
"Our filter will read each pixel from its input, turn it to a negative, and "
@@ -6583,22 +6591,22 @@ msgstr ""
"Наш фильтр будет читать каждый пиксель из входных данных, преобразовывать "
"его в негатив и записывать в выходной буфер."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2644
msgid "Our filter will call `getchar` to fetch the next pixel."
msgstr "Наш фильтр будет вызывать `getchar` для получения следующего пикселя."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2645
msgid "`getchar` will find an empty input buffer, so it will call `read`."
msgstr "`getchar` обнаружит пустой входной буфер, поэтому вызовет `read`."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2646
msgid "`read` will call the `SYS_read` system call."
msgstr "`read` вызовет системный вызов `SYS_read`."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2647
msgid ""
"The _kernel_ will suspend our filter until the image editor sends more data "
@@ -6607,18 +6615,18 @@ msgstr ""
"_Ядро_ приостановит работу нашего фильтра до тех пор, пока редактор "
"изображений не отправит больше данных в канал."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2648
msgid ""
"The image editor will read from the other pipe, connected to the `fd.out` of "
"our filter so it can set the first row of the output image _before_ it sends "
"us the second row of the input."
msgstr ""
-"Редактор изображений будет читать из другого канала, подключенного к "
-"`fd.out` нашего фильтра, чтобы он мог установить первую строку выходного "
-"изображения _до_ того, как отправит нам вторую строку входного."
+"Редактор изображений будет читать из другого канала, подключенного к `fd.out`"
+" нашего фильтра, чтобы он мог установить первую строку выходного изображения "
+"_до_ того, как отправит нам вторую строку входного."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2649
msgid ""
"The _kernel_ suspends the image editor until it receives some output from "
@@ -6627,7 +6635,7 @@ msgstr ""
"_Ядро_ приостанавливает работу графического редактора до тех пор, пока не "
"получит какие-либо данные от нашего фильтра, чтобы передать их редактору."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2653
msgid ""
"At this point our filter waits for the image editor to send it more data to "
@@ -6640,7 +6648,7 @@ msgstr ""
"что наш фильтр отправит ему результат обработки первой строки. Однако "
"результат находится в нашем выходном буфере."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2656
msgid ""
"The filter and the image editor will continue waiting for each other forever "
@@ -6652,7 +6660,7 @@ msgstr ""
"обеспечение только что вошло в crossref:secure[secure-race-"
"conditions,состояние гонки]."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2658
msgid ""
"This problem does not exist if our filter flushes its output buffer _before_ "
@@ -6667,7 +6675,7 @@ msgstr ""
msgid "Using the FPU"
msgstr "Использование FPU"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2663
msgid ""
"Strangely enough, most of assembly language literature does not even mention "
@@ -6678,7 +6686,7 @@ msgstr ""
"существовании FPU, или _блока обработки чисел с плавающей запятой_, не "
"говоря уже о программировании для него."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2665
msgid ""
"Yet, never does assembly language shine more than when we create highly "
@@ -6695,7 +6703,7 @@ msgstr ""
msgid "Organization of the FPU"
msgstr "Организация FPU"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2671
msgid ""
"The FPU consists of 8 80-bit floating-point registers. These are organized "
@@ -6706,7 +6714,7 @@ msgstr ""
"виде стека — вы можете `push` (поместить) значение на TOS (_вершина стека_) "
"и `pop` (извлечь) его."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2673
msgid ""
"That said, the assembly language op codes are not `push` and `pop` because "
@@ -6715,19 +6723,19 @@ msgstr ""
"Как бы то ни было, мнемоники ассемблера — не `push` и `pop`, потому что они "
"уже заняты."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2676
msgid ""
"You can `push` a value on TOS by using `fld`, `fild`, and `fbld`. Several "
"other op codes let you `push` many common _constants_-such as _pi_-on the "
"TOS."
msgstr ""
-"Вы можете `push` (положить) значение на вершину стека (TOS), используя "
-"`fld`, `fild` и `fbld`. Несколько других кодов операций позволяют вам `push` "
+"Вы можете `push` (положить) значение на вершину стека (TOS), используя `fld`"
+", `fild` и `fbld`. Несколько других кодов операций позволяют вам `push` "
"(положить) многие распространённые _константы_ — например, _pi_ — на вершину "
"стека (TOS)."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2679
msgid ""
"Similarly, you can `pop` a value by using `fst`, `fstp`, `fist`, `fistp`, "
@@ -6740,7 +6748,7 @@ msgstr ""
"_p_, буквально `извлекают` значение, остальные же `сохраняют` его в другом "
"месте, не удаляя с вершины стека (TOS)."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2681
msgid ""
"We can transfer the data between the TOS and the computer memory either as a "
@@ -6752,7 +6760,7 @@ msgstr ""
"или 64-битное _целое_ число, либо как 80-битное _упакованное десятичное_ "
"число."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2684
msgid ""
"The 80-bit _packed decimal_ is a special case of _binary coded decimal_ "
@@ -6765,7 +6773,7 @@ msgstr ""
"ASCII-представлением данных и внутренними данными FPU. Он позволяет "
"использовать до 18 значащих цифр."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2686
msgid ""
"No matter how we represent data in the memory, the FPU always stores it in "
@@ -6774,7 +6782,7 @@ msgstr ""
"Независимо от того, как мы представляем данные в памяти, FPU всегда хранит "
"их в 80-битном формате _real_ в своих регистрах."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2688
msgid ""
"Its internal precision is at least 19 decimal digits, so even if we choose "
@@ -6785,7 +6793,7 @@ msgstr ""
"если мы решим отображать результаты в формате ASCII с полной 18-значной "
"точностью, мы всё равно будем показывать корректные результаты."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2690
msgid ""
"We can perform mathematical operations on the TOS: We can calculate its "
@@ -6796,7 +6804,7 @@ msgstr ""
"_масштабировать_ (то есть умножать или делить на степень двойки), вычислять "
"его _логарифм_ по основанию 2 и многое другое."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2692
msgid ""
"We can also _multiply_ or _divide_ it by, _add_ it to, or _subtract_ it "
@@ -6805,16 +6813,17 @@ msgstr ""
"Мы также можем _умножить_ или _разделить_ его, _прибавить_ к нему или "
"_вычесть_ его из любого из регистров FPU (включая его самого)."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2695
msgid ""
"The official Intel op code for the TOS is `st`, and for the _registers_ "
"`st(0)`-`st(7)`. `st` and `st(0)`, then, refer to the same register."
msgstr ""
-"Официальный код операции Intel для TOS — `st`, а для _регистров_ — `st(0)`-"
-"`st(7)`. Таким образом, `st` и `st(0)` ссылаются на один и тот же регистр."
+"Официальный код операции Intel для TOS — `st`, а для _регистров_ — "
+"`st(0)`-`st(7)`. Таким образом, `st` и `st(0)` ссылаются на один и тот же "
+"регистр."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2698
msgid ""
"For whatever reasons, the original author of nasm has decided to use "
@@ -6831,7 +6840,7 @@ msgstr ""
msgid "The Packed Decimal Format"
msgstr "Формат упакованного десятичного числа"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2704
msgid ""
"The _packed decimal_ format uses 10 bytes (80 bits) of memory to represent "
@@ -6927,13 +6936,12 @@ msgid ""
"for this type of data."
msgstr ""
"Книга, которую стоит прочитать — если сможете её найти — это книга Ричарда "
-"Старца http://www.amazon.com/exec/obidos/ASIN/013246604X/"
-"whizkidtechnomag[8087/80287/80387 для IBM PC и совместимых]. Хотя в ней, "
-"кажется, факт о little-endian хранении _упакованного десятичного числа_ "
-"принимается как данность. Я не шучу насчёт отчаяния, которое испытывал, "
-"пытаясь понять, что не так с фильтром, который я привожу ниже, _прежде_ чем "
-"мне пришло в голову попробовать little-endian порядок даже для этого типа "
-"данных."
+"Старца http://www.amazon.com/exec/obidos/ASIN/013246604X/whizkidtechnomag["
+"8087/80287/80387 для IBM PC и совместимых]. Хотя в ней, кажется, факт о "
+"little-endian хранении _упакованного десятичного числа_ принимается как "
+"данность. Я не шучу насчёт отчаяния, которое испытывал, пытаясь понять, что "
+"не так с фильтром, который я привожу ниже, _прежде_ чем мне пришло в голову "
+"попробовать little-endian порядок даже для этого типа данных."
#. type: Title ===
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2743
@@ -6986,8 +6994,8 @@ msgid ""
"may be several). These light rays form an image, a representation of "
"whatever is outside the camera, in front of the hole."
msgstr ""
-"Корпус обычно прочный (например, коробка), хотя иногда он гибкий "
-"(гофрированная часть). Внутри камеры довольно темно. Однако отверстие "
+"Корпус обычно прочный (например, коробка), хотя иногда он гибкий ("
+"гофрированная часть). Внутри камеры довольно темно. Однако отверстие "
"пропускает световые лучи через одну точку (хотя в некоторых случаях их может "
"быть несколько). Эти световые лучи формируют изображение — представление "
"того, что находится снаружи камеры, перед отверстием."
@@ -6998,8 +7006,8 @@ msgid ""
"If some light sensitive material (such as film) is placed inside the camera, "
"it can capture the image."
msgstr ""
-"Если внутрь камеры поместить светочувствительный материал (например, "
-"плёнку), он может зафиксировать изображение."
+"Если внутрь камеры поместить светочувствительный материал (например, плёнку)"
+", он может зафиксировать изображение."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2762
@@ -7071,8 +7079,8 @@ msgid ""
"types of light will require a different constant, whose value can only be "
"determined by experimentation."
msgstr ""
-"Здесь `D` — идеальный диаметр отверстия, `FL` — фокусное расстояние, а `PC` "
-"— константа отверстия. По данным Джейя Бендера, её значение равно `0,04`, "
+"Здесь `D` — идеальный диаметр отверстия, `FL` — фокусное расстояние, а `PC` —"
+" константа отверстия. По данным Джейя Бендера, её значение равно `0,04`, "
"тогда как Кеннет Коннорс определил его как `0,037`. Другие исследователи "
"предложили иные значения. Кроме того, это значение справедливо только для "
"дневного света: другие типы освещения потребуют иной константы, значение "
@@ -7093,8 +7101,8 @@ msgid ""
msgstr ""
"Число f — это очень полезный показатель того, сколько света попадает на "
"плёнку. Экспонометр может определить, что, например, для экспонирования "
-"плёнки определённой чувствительности при f5.6 может потребоваться выдержка "
-"1/1000 сек."
+"плёнки определённой чувствительности при f5.6 может потребоваться выдержка 1/"
+"1000 сек."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2796
@@ -7217,8 +7225,8 @@ msgid ""
msgstr ""
"Типичная камера устроена так, что установка любого из нормализованных чисел "
"f изменяет ощущение от регулятора. Он естественным образом _останавливается_ "
-"в этом положении. Из-за этого такие положения регулятора называются f-"
-"ступенями."
+"в этом положении. Из-за этого такие положения регулятора называются "
+"f-ступенями."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2838
@@ -7281,8 +7289,8 @@ msgstr ""
"Большинство написанных нами до сих пор программ работали с отдельными "
"символами или байтами в качестве входных данных: программа hex "
"преобразовывала отдельные байты в шестнадцатеричное число, программа csv "
-"либо пропускала символ, либо удаляла его, либо заменяла на другой символ и "
-"т.д."
+"либо пропускала символ, либо удаляла его, либо заменяла на другой символ и т."
+"д."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2853
@@ -7605,7 +7613,7 @@ msgstr ""
"Учитывая эту систему, программа может обнаружить конфликтующие параметры и "
"обработать их следующим образом:"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2955
msgid ""
"If it finds an _ad hoc_ choice (e.g., command line parameter), it should "
@@ -7615,7 +7623,7 @@ msgstr ""
"она должна принять этот выбор. Она должна игнорировать любой постоянный "
"выбор и значения по умолчанию."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2956
msgid ""
"_Otherwise_, if it finds a permanent option (e.g., an environment variable), "
@@ -7625,18 +7633,18 @@ msgstr ""
"переменная окружения), он должен быть принят, а значение по умолчанию — "
"проигнорировано."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2957
msgid "_Otherwise_, it should use the default."
msgstr "_В противном случае_, следует использовать значение по умолчанию."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2959
msgid "We also need to decide what _format_ our `PC` option should have."
msgstr ""
"Нам также необходимо решить, в каком _формате_ должна быть наша опция `PC`."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2961
msgid ""
"At first site, it seems obvious to use the `PINHOLE=0.04` format for the "
@@ -7645,7 +7653,7 @@ msgstr ""
"На первый взгляд кажется очевидным использовать формат `PINHOLE=0.04` для "
"переменной окружения и `-p0.04` для командной строки."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2965
msgid ""
"Allowing that is actually a security risk. The `PC` constant is a very small "
@@ -7658,7 +7666,7 @@ msgstr ""
"программное обеспечение, используя различные небольшие значения `PC`. Но что "
"произойдёт, если кто-то запустит программу, выбрав огромное значение?"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2967
msgid ""
"It may crash the program because we have not designed it to handle huge "
@@ -7667,7 +7675,7 @@ msgstr ""
"Это может привести к сбою программы, так как мы не разрабатывали её для "
"обработки огромных чисел."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2970
msgid ""
"Or, we may spend more time on the program so it can handle huge numbers. We "
@@ -7679,14 +7687,14 @@ msgstr ""
"коммерческое программное обеспечение для аудитории, не знакомой с "
"компьютерами."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2972
msgid "Or, we might say, _\"Tough! The user should know better.\"\"_"
msgstr ""
"Или можно сказать: _\"Пусть терпит! Пользователь сам должен был разобраться."
"\"_"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2975
msgid ""
"Or, we just may make it impossible for the user to enter a huge number. "
@@ -7696,19 +7704,19 @@ msgstr ""
"числа. Это подход, который мы выберем: мы будем использовать "
"_подразумеваемый префикс 0._."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2978
msgid ""
"In other words, if the user wants `0.04`, we will expect him to type `-p04`, "
"or set `PINHOLE=04` in his environment. So, if he says `-p9999999`, we will "
"interpret it as ``0.9999999``-still ridiculous but at least safer."
msgstr ""
-"Другими словами, если пользователь хочет `0.04`, мы ожидаем, что он введёт `-"
-"p04` или установит `PINHOLE=04` в своём окружении. Таким образом, если он "
+"Другими словами, если пользователь хочет `0.04`, мы ожидаем, что он введёт "
+"`-p04` или установит `PINHOLE=04` в своём окружении. Таким образом, если он "
"укажет `-p9999999`, мы интерпретируем это как ``0.9999999`` — всё ещё "
"нелепо, но по крайней мере безопаснее."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2981
msgid ""
"Secondly, many users will just want to go with either Bender's constant or "
@@ -7725,7 +7733,7 @@ msgstr ""
msgid "The Output"
msgstr "Вывод результата"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2986
msgid ""
"We need to decide what we want our software to send to the output, and in "
@@ -7734,7 +7742,7 @@ msgstr ""
"Нам нужно решить, что наше программное обеспечение должно отправлять на "
"вывод и в каком формате."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2988
msgid ""
"Since our input allows for an unspecified number of focal length entries, it "
@@ -7747,7 +7755,7 @@ msgstr ""
"базы данных, показывая результат вычислений для каждого фокусного расстояния "
"на отдельной строке, разделяя все значения в строке символом табуляции."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2991
msgid ""
"Optionally, we should also allow the user to specify the use of the CSV "
@@ -7760,7 +7768,7 @@ msgstr ""
"разделёнными запятыми названиями, описывающими каждое поле каждой строки, а "
"затем отобразим результаты как прежде, но заменив `табуляцию` на `запятую`."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:2996
msgid ""
"We need a command line option for the CSV format. We cannot use `-c` "
@@ -7769,14 +7777,14 @@ msgid ""
"the CSV format predates Excel). We will, therefore, use the `-e` switch to "
"inform our software we want the output in the CSV format."
msgstr ""
-"Нам нужна опция командной строки для формата CSV. Мы не можем использовать `-"
-"c`, потому что это уже означает _использовать константу Коннорса_. По какой-"
-"то странной причине многие веб-сайты называют CSV-файлы _\"электронными "
-"таблицами Excel\"_ (хотя формат CSV появился раньше Excel). Поэтому мы будем "
-"использовать переключатель `-e`, чтобы указать нашему программному "
+"Нам нужна опция командной строки для формата CSV. Мы не можем использовать "
+"`-c`, потому что это уже означает _использовать константу Коннорса_. По "
+"какой-то странной причине многие веб-сайты называют CSV-файлы _\"электронными"
+" таблицами Excel\"_ (хотя формат CSV появился раньше Excel). Поэтому мы "
+"будем использовать переключатель `-e`, чтобы указать нашему программному "
"обеспечению, что мы хотим получить вывод в формате CSV."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3000
msgid ""
"We will start each line of the output with the focal length. This may sound "
@@ -7787,7 +7795,7 @@ msgstr ""
"избыточным сначала, особенно в интерактивном режиме: пользователь вводит "
"фокусное расстояние, а мы его повторяем."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3004
msgid ""
"But the user can type several focal lengths on one line. The input can also "
@@ -7798,7 +7806,7 @@ msgstr ""
"Ввод также может поступать из файла или вывода другой программы. В этом "
"случае пользователь вообще не видит вводимые данные."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3006
msgid ""
"By the same token, the output can go to a file which we will want to examine "
@@ -7808,7 +7816,7 @@ msgstr ""
"изучить позже, или на принтер, или стать входными данными для другой "
"программы."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3008
msgid ""
"So, it makes perfect sense to start each line with the focal length as "
@@ -7817,7 +7825,7 @@ msgstr ""
"Итак, имеет полный смысл начинать каждую строку с фокусного расстояния, "
"введённого пользователем."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3011
msgid ""
"No, wait! Not as entered by the user. What if the user types in something "
@@ -7922,7 +7930,9 @@ msgstr "Мы ударим его по лицу, образно говоря:"
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3049
#, no-wrap
msgid "17459765723452353453534535353530530534563507309676764423\t???\t???\t???\t???\t???\n"
-msgstr "17459765723452353453534535353530530534563507309676764423\t???\t???\t???\t???\t???\n"
+msgstr ""
+"17459765723452353453534535353530530534563507309676764423\t???\t???\t???\t???"
+"\t???\n"
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3053
@@ -7935,12 +7945,12 @@ msgstr ""
"ненулевую цифру, мы инициализируем счетчик значением `0` и начнем выполнять "
"три шага:"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3056
msgid "Send the digit to the output."
msgstr "Отправить цифру на выход."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3057
msgid ""
"Append the digit to a buffer we will use later to produce the packed decimal "
@@ -7949,12 +7959,12 @@ msgstr ""
"Добавить цифру в буфер, который мы позже используем для создания "
"упакованного десятичного числа, которое можно отправить в FPU."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3058
msgid "Increase the counter."
msgstr "Увеличить счетчик."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3060
msgid ""
"Now, while we are taking these three steps, we also need to watch out for "
@@ -7963,7 +7973,7 @@ msgstr ""
"Теперь, пока мы выполняем эти три шага, нам также необходимо следить за "
"одним из двух условий:"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3062
msgid ""
"If the counter grows above 18, we stop appending to the buffer. We continue "
@@ -7972,7 +7982,7 @@ msgstr ""
"Если счётчик превышает 18, мы прекращаем добавление в буфер. Мы продолжаем "
"читать цифры и отправлять их на вывод."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3063
msgid ""
"If, or rather _when_, the next input character is not a digit, we are done "
@@ -7981,29 +7991,29 @@ msgstr ""
"Если, или скорее _когда_, следующий вводимый символ не является цифрой, мы "
"завершаем ввод на данный момент."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3066
msgid ""
"Incidentally, we can simply discard the non-digit, unless it is a `+#+`, "
"which we must return to the input stream. It starts a comment, so we must "
"see it after we are done producing output and start looking for more input."
msgstr ""
-"Между прочим, мы можем просто отбросить нецифровой символ, если это не "
-"`+#+`, который необходимо вернуть во входной поток. Он начинает комментарий, "
+"Между прочим, мы можем просто отбросить нецифровой символ, если это не `+#+`"
+", который необходимо вернуть во входной поток. Он начинает комментарий, "
"поэтому мы должны увидеть его после завершения вывода и начала поиска "
"следующего ввода."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3068
msgid ""
"That still leaves one possibility uncovered: If all the user enters is a "
"zero (or several zeros), we will never find a non-zero to display."
msgstr ""
-"Остается одна непокрытая возможность: если пользователь вводит только ноль "
-"(или несколько нулей), мы никогда не найдем ненулевое значение для "
+"Остается одна непокрытая возможность: если пользователь вводит только ноль ("
+"или несколько нулей), мы никогда не найдем ненулевое значение для "
"отображения."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3071
msgid ""
"We can determine this has happened whenever our counter stays at `0`. In "
@@ -8026,8 +8036,8 @@ msgid ""
"Once we have displayed the focal length and determined it is valid (greater "
"than `0` but not exceeding 18 digits), we can calculate the pinhole diameter."
msgstr ""
-"Как только мы определили фокусное расстояние и убедились, что оно корректно "
-"(больше `0`, но не превышает 18 цифр), можно рассчитать диаметр отверстия."
+"Как только мы определили фокусное расстояние и убедились, что оно корректно ("
+"больше `0`, но не превышает 18 цифр), можно рассчитать диаметр отверстия."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3081
@@ -8151,12 +8161,12 @@ msgstr ""
"Вот мой (я думаю, он неуклюжий — если у вас есть вариант лучше, "
"_пожалуйста_, дайте мне знать):"
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3120
msgid "Initialize a counter to `0`."
msgstr "Инициализировать счетчик значением `0`."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3121
msgid ""
"While the number is greater than or equal to `10000`, divide it by `10` and "
@@ -8164,12 +8174,12 @@ msgid ""
msgstr ""
"Пока число больше или равно `10000`, делим его на `10` и увеличиваем счётчик."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3122
msgid "Output the result."
msgstr "Вывести результат."
-#. type: .procedure
+#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3123
msgid ""
"While the counter is greater than `0`, output `0` and decrease the counter."
@@ -8527,8 +8537,8 @@ msgid ""
"only one or two digits anyway."
msgstr ""
"Этот расчет также довольно прост. Все, что нам нужно сделать, это вычислить "
-"логарифм по основанию 2 от множителя f5.6, который мы только что рассчитали "
-"(хотя нам нужно его значение до округления). Затем мы выводим результат, "
+"логарифм по основанию 2 от множителя f5.6, который мы только что рассчитали ("
+"хотя нам нужно его значение до округления). Затем мы выводим результат, "
"округленный до ближайшего целого числа. Нам не нужно беспокоиться о наличии "
"более четырех значащих цифр в этом случае: скорее всего, результат будет "
"содержать только одну или две цифры."
@@ -8681,8 +8691,8 @@ msgid ""
msgstr ""
"Гораздо быстрее умножать, чем делить. Поэтому в начале нашей программы мы "
"делим `1` на `10`, чтобы получить `0.1`, который затем сохраняем в стеке: "
-"вместо того чтобы делить ввод на `10` для каждой цифры, мы умножаем его на "
-"`0.1`."
+"вместо того чтобы делить ввод на `10` для каждой цифры, мы умножаем его на `0"
+".1`."
#. type: Plain text
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3284
@@ -8798,7 +8808,8 @@ msgid ""
";\n"
";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
msgstr ""
-";;;;;;; pinhole.asm ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";;;;;;; pinhole.asm "
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
";\n"
"; Find various parameters of a pinhole camera construction and use\n"
";\n"
@@ -8808,7 +8819,8 @@ msgstr ""
"; Copyright (c) 2001 G. Adam Stanislav\n"
"; All rights reserved.\n"
";\n"
-";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;\n"
+";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"
+";;\n"
#. type: delimited block . 4
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:3368
@@ -8855,7 +8867,8 @@ msgstr ""
"envar\tdb\t'PINHOLE='\t; Exactly 8 bytes, or 2 dwords long\n"
"pinhole\tdb\t'04,', \t\t; Bender's constant (0.04)\n"
"connors\tdb\t'037', 0Ah\t; Connors' constant\n"
-"usg\tdb\t'Usage: pinhole [-b] [-c] [-e] [-p <value>] [-o <outfile>] [-i <infile>]', 0Ah\n"
+"usg\tdb\t'Usage: pinhole [-b] [-c] [-e] [-p <value>] [-o <outfile>] [-i "
+"<infile>]', 0Ah\n"
"usglen\tequ\t$-usg\n"
"iemsg\tdb\t\"pinhole: Can't open input file\", 0Ah\n"
"iemlen\tequ\t$-iemsg\n"
@@ -8863,7 +8876,8 @@ msgstr ""
"oemlen\tequ\t$-oemsg\n"
"pinmsg\tdb\t\"pinhole: The PINHOLE constant must not be 0\", 0Ah\n"
"pinlen\tequ\t$-pinmsg\n"
-"toobig\tdb\t\"pinhole: The PINHOLE constant may not exceed 18 decimal places\", 0Ah\n"
+"toobig\tdb\t\"pinhole: The PINHOLE constant may not exceed 18 decimal "
+"places\", 0Ah\n"
"biglen\tequ\t$-toobig\n"
"huhmsg\tdb\t9, '???'\n"
"separ\tdb\t9, '???'\n"
@@ -10345,8 +10359,7 @@ msgstr ""
#. type: delimited block _ 4
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4029
msgid "When we have no more input, it can mean one of two things:"
-msgstr ""
-"Когда у нас больше нет входных данных, это может означать одно из двух:"
+msgstr "Когда у нас больше нет входных данных, это может означать одно из двух:"
#. type: delimited block _ 4
#: documentation/content/en/books/developers-handbook/x86/_index.adoc:4031
@@ -10879,7 +10892,8 @@ msgid ""
msgstr ""
"% ./medium -b -e > bender\n"
"% cat bender\n"
-"focal length in millimeters,pinhole diameter in microns,F-number,normalized F-number,F-5.6 multiplier,stops from F-5.6\n"
+"focal length in millimeters,pinhole diameter in microns,F-number,normalized "
+"F-number,F-5.6 multiplier,stops from F-5.6\n"
"80,358,224,256,1562,11\n"
"30,219,137,128,586,9\n"
"40,253,158,181,781,10\n"