aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/ru/books/handbook/cutting-edge/_index.adoc
diff options
context:
space:
mode:
Diffstat (limited to 'documentation/content/ru/books/handbook/cutting-edge/_index.adoc')
-rw-r--r--documentation/content/ru/books/handbook/cutting-edge/_index.adoc1048
1 files changed, 481 insertions, 567 deletions
diff --git a/documentation/content/ru/books/handbook/cutting-edge/_index.adoc b/documentation/content/ru/books/handbook/cutting-edge/_index.adoc
index b7dc4fb8ba..9cb3c24d83 100644
--- a/documentation/content/ru/books/handbook/cutting-edge/_index.adoc
+++ b/documentation/content/ru/books/handbook/cutting-edge/_index.adoc
@@ -1,23 +1,25 @@
---
-title: Глава 21. Обновление системы и смена версии FreeBSD
-part: Часть III. Системное администрирование
+description: 'Информация о том, как поддерживать систему FreeBSD в актуальном состоянии с помощью `freebsd-update` или Git, как пересобрать и переустановить всю базовую систему и так далее'
+next: books/handbook/dtrace
+params:
+ path: /books/handbook/cutting-edge/
+part: 'Часть III. Администрирование системы'
prev: books/handbook/l10n
-next: books/handbook/partiv
showBookMenu: true
-weight: 25
-params:
- path: "/books/handbook/cutting-edge/"
+tags: ["updating", "upgrading", "documentation", "FreeBSD-STABLE", "FreeBSD-CURRENT", "Security Patches"]
+title: 'Глава 26. Обновление и смена версии FreeBSD'
+weight: 30
---
[[updating-upgrading]]
-= Обновление системы и смена версии FreeBSD
+= Обновление и смена версии FreeBSD
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
-:sectnumoffset: 21
+:sectnumoffset: 26
:partnums:
:source-highlighter: rouge
:experimental:
@@ -48,48 +50,48 @@ include::../../../../../shared/asciidoctor.adoc[]
endif::[]
[[updating-upgrading-synopsis]]
-== Краткий обзор
+== Обзор
-Между релизами над FreeBSD ведется постоянная работа. Некоторые отдают предпочтение официально выпущенным версиям, в то время как остальные предпочитают использовать последние разработки. Тем не менее, даже для официальных версий часто выходят обновления, связанные с безопасностью и другими критическими исправлениями. Независимо от используемой версии FreeBSD предоставляет все необходимые инструменты для поддержания системы в актуальном состоянии, а также позволяет легко перейти на другую версию. Эта глава описывает, как отслеживать систему в процессе её разработки, а также основные инструменты для поддержания системы FreeBSD в актуальном состоянии.
+FreeBSD постоянно развивается между выпусками. Некоторые предпочитают использовать официальные выпущенные версии, в то время как другие следят за последними изменениями в разработке. Однако даже официальные выпуски часто обновляются с исправлениями безопасности и другими критическими исправлениями. Независимо от используемой версии, FreeBSD предоставляет все необходимые инструменты для поддержания системы в актуальном состоянии и позволяет легко обновляться между версиями. В этой главе описывается, как отслеживать разработку системы и основные инструменты для поддержания FreeBSD в актуальном состоянии.
-После чтения этой главы вы будете знать:
+Прочитав эту главу, вы будете знать:
-* Как поддерживать систему FreeBSD в актуальном состоянии при помощи freebsd-update, Subversion или CTM.
-* Как узнать состояние установленной системы по отношению к известной нетронутой копии.
-* Как поддерживать установленную документацию в актуальном состоянии при помощи Subversion или портов документации.
-* Разницу между двумя ветвями разработки: FreeBSD-STABLE и FreeBSD-CURRENT.
-* Как перестраивать и переустанавливать всю базовую систему.
+* Как поддерживать систему FreeBSD в актуальном состоянии с помощью freebsd-update или Git.
+* Как сравнить состояние установленной системы с известной чистой копией.
+* Как поддерживать установленную документацию в актуальном состоянии с помощью Git или портов документации.
+* Разница между двумя ветвями разработки: FreeBSD-STABLE и FreeBSD-CURRENT.
+* Как пересобрать и переустановить всю базовую систему.
-Перед чтением этой главы вы должны:
+Прежде чем читать эту главу, вы должны:
-* Правильно настроить сетевое подключение (crossref:advanced-networking[advanced-networking, Сложные вопросы работы в сети]).
-* Знать, как устанавливать дополнительное стороннее программное обеспечение (crossref:ports[ports, Установка приложений. порты и пакеты]).
+* Правильно настроить сетевое подключение (crossref:advanced-networking[advanced-networking,Сложные вопросы работы в сети]).
+* Знать, как устанавливать дополнительное стороннее программное обеспечение (crossref:ports[ports,Установка приложений: Пакеты и Порты]).
[NOTE]
====
-В этой главе для получения и обновления исходных текстов FreeBSD используется команда `svn`. Для этого нужно сперва установить порт или пакет package:devel/subversion[].
+В этой главе для получения и обновления исходных кодов FreeBSD используется `git`. При желании можно использовать порт или пакет package:devel/git[].
====
[[updating-upgrading-freebsdupdate]]
== Обновление FreeBSD
-Своевременное применение обновлений безопасности и переход на более новую версию операционной системы - важные аспекты системного администрирования. FreeBSD включает в себя программу `freebsd-update`, которую можно использовать для решения обеих задач.
+Применение исправлений безопасности своевременно и обновление до более новой версии операционной системы являются важными аспектами текущего администрирования системы. FreeBSD включает утилиту `freebsd-update`, которую можно использовать для выполнения обеих задач.
-Эта программа используется для установки распространяемых в двоичном виде обновлений безопасности и исправлений для FreeBSD без необходимости ручной компиляции и установки патчей или нового ядра. Двоичные обновления доступны для всех архитектур и версий, поддерживаемых группой безопасности. Перечень поддерживаемых версий и их ожидаемые даты окончания поддержки указаны на странице http://www.FreeBSD.org/security/[http://www.FreeBSD.org/security/].
+Этот инструмент поддерживает бинарные обновления безопасности и исправления ошибок в FreeBSD без необходимости ручной компиляции и установки патчей или нового ядра. Бинарные обновления доступны для всех архитектур и выпусков, которые в настоящее время поддерживаются командой безопасности. Список поддерживаемых выпусков и их предполагаемые даты окончания поддержки приведены на странице https://www.FreeBSD.org/security/[https://www.FreeBSD.org/security/].
-Эта программа также используется для незначительных обновлений версии операционной системы, а также для перехода на другую ветвь выпуска релизов. Перед обновлением следует ознакомиться с объявлением о выпуске новой версии, так как там может содержаться важная информация, применимая к версии, на которую намечен переход. С соответствующими объявлениями можно ознакомиться по ссылке http://www.FreeBSD.org/releases/[http://www.FreeBSD.org/releases/].
+Эта утилита также поддерживает обновления операционной системы со сменой младших версий, а также переход на другую ветку выпусков. Перед обновлением до нового выпуска ознакомьтесь с его анонсом, так как он содержит важную информацию, относящуюся к выпуску. Анонсы выпусков доступны по адресу https://www.FreeBSD.org/releases/[https://www.FreeBSD.org/releases/].
[NOTE]
====
-Если имеется задание `crontab`, запускающее man:freebsd-update[8], то перед сменой версии операционной системы его обязательно нужно выключить.
+Если существует man:crontab[5], использующий возможности man:freebsd-update[8], его необходимо отключить перед обновлением операционной системы.
====
-В этом разделе описывается конфигурационный файл `freebsd-update`, демонстрируется применение исправлений безопасности и обновление операционной системы со сменой младшей или старшей версии, а также обсуждаются некоторые соображения касаемо смены версии операционной системы.
+В этом разделе описывается файл конфигурации, используемый `freebsd-update`, демонстрируется применение патча безопасности, обновление со сменой мледшей или старшей версии операционной системы, а также рассматриваются некоторые аспекты, которые следует учитывать при обновлении ОС.
[[freebsdupdate-config-file]]
-=== Конфигурационный файл
+=== Файл конфигурации
-Конфигурационный файл `freebsd-update` самодостаточен и работает по умолчанию. Некоторые пользователи могут пожелать отредактировать конфигурационный файл [.filename]#/etc/freebsd-update.conf# для лучшего контроля над процессом обновления. В комментариях описываются доступные в этом файле параметры, но для следующих из них может потребоваться дополнительное разъяснение:
+Файл конфигурации по умолчанию для `freebsd-update` работает без изменений. Некоторые пользователи могут захотеть настроить конфигурацию по умолчанию в [.filename]#/etc/freebsd-update.conf#, чтобы лучше контролировать процесс. Комментарии в этом файле объясняют доступные опции, но следующие моменты могут потребовать дополнительного пояснения:
[.programlisting]
....
@@ -97,7 +99,7 @@ endif::[]
Components world kernel
....
-Данный параметр определяет, какие части FreeBSD будут обновлены. По умолчанию обновляется вся базовая система (world) и ядро (kernel). Вместо этого можно указать отдельные компоненты, такие как `src/base` или `src/sys`. Тем не менее, лучшим вариантом будет оставить всё как есть, поскольку изменение этого перечня с целью добавления особых пунктов потребует от пользователя указания подряд всех пунктов. Со временем это может привести к негативным последствиям из-за возможной рассинхронизации между исходными текстами и двоичными файлами.
+Этот параметр определяет, какие части FreeBSD будут поддерживаться в актуальном состоянии. По умолчанию обновляется вся базовая система и ядро. Вместо этого можно указать отдельные компоненты, например `src/base` или `src/sys`. Однако лучшим вариантом будет оставить значение по умолчанию, так как изменение параметра для включения конкретных компонентов требует перечисления всех необходимых элементов. Со временем это может привести к катастрофическим последствиям, поскольку исходный код и исполняемые файлы могут перестать быть синхронизированными.
[.programlisting]
....
@@ -106,7 +108,7 @@ Components world kernel
IgnorePaths /boot/kernel/linker.hints
....
-Добавьте сюда пути к каталогам (например, [.filename]#/bin# или [.filename]#/sbin#), которые вы бы хотели оставить нетронутыми в процессе обновления. Этот параметр можно использовать для предотвращения перезаписывания локальных изменений программой `freebsd-update`.
+Чтобы оставить указанные каталоги, такие как [.filename]#/bin# или [.filename]#/sbin#, без изменений в процессе обновления, добавьте их пути в эту инструкцию. Эта опция может быть использована для предотвращения перезаписи локальных изменений с помощью `freebsd-update`.
[.programlisting]
....
@@ -116,7 +118,7 @@ IgnorePaths /boot/kernel/linker.hints
UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile
....
-Этот параметр позволяет обновлять конфигурационные файлы в указанных каталогах, только если они не содержат изменений. При наличии каких-либо изменений со стороны пользователя автоматическое обновление таких файлов отменяется. Есть другой параметр `KeepModifiedMetadata`, который предписывает команде `freebsd-update` сохранять изменения в процессе слияния.
+Эта опция будет обновлять только неизмененные конфигурационные файлы в указанных каталогах. Любые изменения, внесенные пользователем, предотвратят автоматическое обновление этих файлов. Существует другая опция, `KeepModifiedMetadata`, которая предписывает `freebsd-update` сохранять изменения во время слияния.
[.programlisting]
....
@@ -125,7 +127,7 @@ UpdateIfUnmodified /etc/ /var/ /root/ /.cshrc /.profile
MergeChanges /etc/ /var/named/etc/ /boot/device.hints
....
-Список каталогов с конфигурационными файлами, для которых `freebsd-update` попытается выполнить слияние. Процесс слияния файла представляет собой последовательность изменений в формате man:diff[1], похожую на man:mergemaster[8], но с меньшим количеством параметров. Результат слияния принимается, открывается редактор или `freebsd-update` прекращает работу. В случае сомнений сделайте резервную копию [.filename]#/etc# и просто согласитесь со всеми изменениями. Для получения подробной информации по команде `mergemaster` смотрите <<mergemaster>>.
+Список каталогов с файлами конфигурации, которые `freebsd-update` должен попытаться объединить. Процесс объединения файлов представляет собой серию патчей man:diff[1]. Объединения могут быть приняты, открыты в редакторе или привести к прерыванию работы `freebsd-update`. В случае сомнений создайте резервную копию [.filename]#/etc# и просто примите объединения.
[.programlisting]
....
@@ -134,7 +136,7 @@ MergeChanges /etc/ /var/named/etc/ /boot/device.hints
# WorkDir /var/db/freebsd-update
....
-Этот каталог предназначен для размещения патчей и временных файлов. В случае, когда пользователь выполняет обновление со сменой версии, в этом месте нужно иметь по крайней мере гигабайт свободного дискового пространства.
+Этот каталог предназначен для всех патчей и временных файлов. В случае обновления версии в этом расположении должно быть доступно как минимум гигабайт дискового пространства.
[.programlisting]
....
@@ -145,76 +147,115 @@ MergeChanges /etc/ /var/named/etc/ /boot/device.hints
# StrictComponents no
....
-Если выставлено значение `yes`, то `freebsd-update` будет исходить из того, что список `Components` является полным, и не будет пытаться выполнить изменения за пределами этого списка. В действительности `freebsd-update` попытается обновить все файлы, которые принадлежат списку `Components`.
+Когда эта опция установлена в `yes`, `freebsd-update` будет считать список `Components` полным и не будет пытаться вносить изменения за его пределами. Фактически, `freebsd-update` попытается обновить каждый файл, принадлежащий списку `Components`.
+
+Обратитесь к man:freebsd-update.conf[5] для получения дополнительной информации.
[[freebsdupdate-security-patches]]
-=== Обновления безопасности
+=== Применение обновлений безопасности
-Процесс применения обновлений безопасности FreeBSD был упрощён, что позволяет поддерживать систему в актуальном состоянии, используя `freebsd-update`. Для получения дополнительной информации по бюллетеням безопасности FreeBSD смотрите crossref:security[security-advisories,Сообщения безопасности FreeBSD].
+Процесс применения патчей безопасности FreeBSD был упрощен, что позволяет администратору поддерживать систему в полностью обновленном состоянии с помощью `freebsd-update`. Дополнительная информация о выпусках безопасности FreeBSD доступна в crossref:security[security-advisories,"Рекомендации по безопасности FreeBSD"].
-Обновления безопасности можно загрузить и установить с использованием следующих команд. Первая команда определяет наличие незагруженных обновлений и показывает файлы, которые будут изменены в процессе обновления. Вторая команда выполняет обновление.
+Обновления безопасности FreeBSD могут быть загружены и установлены с помощью следующих команд. Первая команда проверит наличие доступных обновлений и, если они есть, выведет список файлов, которые будут изменены при их применении. Вторая команда применит обновления.
-[source,shell]
+[source, shell]
....
# freebsd-update fetch
# freebsd-update install
....
-Если были установлены обновления ядра, то после этого нужно перезагрузить систему. Если обновление установилось для какого-либо работающего в системе двоичного файла, то следует перезапустить затронутые приложения, чтобы использовалась исправленная версия двоичного файла.
+Если обновление включает какие-либо исправления для ядра, системе потребуется перезагрузка для загрузки исправленного ядра. Если исправление было применено к каким-либо выполняемым файлам, затронутые приложения следует перезапустить, чтобы использовалась исправленная версия бинарного файла.
-Можно настроить ежедневную автоматическую проверку наличия обновлений, добавив следующую запись в [.filename]#/etc/crontab#:
+[NOTE]
+====
+Обычно пользователь должен быть готов перезагрузить систему. Чтобы проверить, требуется ли перезагрузка из-за обновления ядра, выполните команды `freebsd-version -k` и `uname -r`. Перезагрузите систему, если их вывод различается.
+====
+
+Систему можно настроить для автоматической проверки обновлений раз в день, добавив следующую запись в [.filename]#/etc/crontab#:
[.programlisting]
....
@daily root freebsd-update cron
....
-При наличии обновлений они будут автоматически загружены. Пользователю `root` будет отправлено письмо, так что эти обновления можно будет просмотреть и установить самостоятельно командой `freebsd-update install`.
+Если существуют патчи, они будут автоматически загружены, но не применены. Пользователь `root` получит письмо, чтобы патчи можно было просмотреть и установить вручную с помощью `freebsd-update install`.
-На случай, если что-то пошло не так, в `freebsd-update` предусмотрен механизм возврата последнего набора изменений с использованием следующей команды:
+Если что-то пойдет не так, `freebsd-update` может откатить последние изменения с помощью следующей команды:
-[source,shell]
+[source, shell]
....
# freebsd-update rollback
Uninstalling updates... done.
....
-Если после завершения всех действий было изменено ядро или какой-либо из его модулей, система должна быть перезагружена, а все затронутые исполняемые файлы нужно перезапустить.
+Вновь, система должна быть перезапущена, если ядро или какие-либо модули ядра были изменены, и все затронутые бинарные файлы должны быть перезапущены.
-Команда `freebsd-update` позволяет автоматически обновлять только ядро [.filename]#GENERIC#. Если используется ядро с собственной конфигурацией, его понадобится пересобрать и переустановить после того, как `freebsd-update` завершит установку обновлений. Тем не менее, `freebsd-update` обнаружит и обновит ядро [.filename]#GENERIC# при наличии [.filename]#/boot/GENERIC#, даже если оно не является текущим используемым ядром в системе.
+Только ядро [.filename]#GENERIC# может быть автоматически обновлено с помощью `freebsd-update`. Если установлено пользовательское ядро, его необходимо пересобрать и переустановить после завершения установки обновлений `freebsd-update`. Имя ядра по умолчанию — _GENERIC_. Для проверки его установки можно использовать команду man:uname[1].
[NOTE]
====
-Всегда храните копию ядра [.filename]#GENERIC# в [.filename]#/boot/GENERIC#. Оно пригодится при решении различных проблем, а также при выполнении обновления со сменой версии. Смотрите <<freebsd-update-custom-kernel-9x>> для описания получения копии ядра [.filename]#GENERIC#.
+Всегда сохраняйте копию ядра [.filename]#GENERIC# в [.filename]#/boot/GENERIC#. Оно может быть полезно при диагностике различных проблем и при обновлении версий. Инструкции по получению копии ядра [.filename]#GENERIC# можно найти в crossref:cutting-edge[freebsd-update-custom-kernel-9x, Custom Kernels with FreeBSD 9.X and Later].
====
-Если конфигурация в [.filename]#/etc/freebsd-update.conf# не изменялась, `freebsd-update` вместе с остальными обновлениями установит обновлённые исходные тексты ядра. После этого можно обычным способом выполнить перестроение и переустановку нового ядра с собственной конфигурацией.
+Если конфигурация по умолчанию в [.filename]#/etc/freebsd-update.conf# не была изменена, `freebsd-update` установит обновленные исходные коды ядра вместе с остальными обновлениями. Затем пересборка и переустановка нового пользовательского ядра могут быть выполнены обычным способом.
-Обновления, получаемые с помощью `freebsd-update`, не всегда затрагивают ядро. Перестроение собственного ядра не является обязательным, если исходные тексты ядра не были изменены при выполнении `freebsd-update install`. Тем не менее, `freebsd-update` всегда обновляет [.filename]#/usr/src/sys/conf/newvers.sh#. Текущий набор изменений, как указано в номере `-p` в выводе `uname -r`, получается из этого файла. Перестроение собственного ядра, даже если ничего больше не менялось, позволяет `uname` правильно сообщать текущий набор изменений в системе. Это в частности может помочь при сопровождении множества систем, поскольку позволяет быстро оценить наличие установленных обновлений в каждой из них.
+Обновления, распространяемые через `freebsd-update`, не всегда затрагивают ядро. Нет необходимости пересобирать собственное ядро, если исходные коды ядра не были изменены командой `freebsd-update install`. Однако `freebsd-update` всегда обновляет файл [.filename]#/usr/src/sys/conf/newvers.sh#. Текущий уровень патча, обозначаемый числом после `-p` в выводе `uname -r`, берётся из этого файла. Пересборка собственного ядра, даже если ничего больше не менялось, позволяет `uname` точно отображать текущий уровень патча системы. Это особенно полезно при обслуживании нескольких систем, так как позволяет быстро оценить установленные обновления на каждой из них.
[[freebsdupdate-upgrade]]
-=== Обновления со сменой старшей и младшей версий
+=== Выполнение обновлений с изменением младших и старших версий
+
+Обновления с изменением младшей версии FreeBSD называются _минорными обновлениями_. Пример:
+
+- FreeBSD 13.1 до 13.2.
+
+_Мажорные_ обновления увеличивают номер старшей версии. Пример:
+
+- FreeBSD 13.2 до 14.0.
+
+Оба типа обновления могут быть выполнены путем указания `freebsd-update` целевой версии выпуска.
+
+[WARNING]
+====
+После каждого нового выпуска `RELEASE` серверы сборки пакетов FreeBSD в течение ограниченного периода времени *не* используют новую версию операционной системы. Это обеспечивает преемственность для многих пользователей, которые не обновляются сразу после объявления о выпуске. Например:
+
+* Пакеты для пользователей версий 13.1 и 13.2 будут собираться на сервере под управлением 13.1, пока поддержка 13.1 не прекратится
+
+-- и, что критически важно:
-Обновление с FreeBSD 9.0 на FreeBSD 9.1, называется обновлением со сменой младшего номера версии. Смена старшего номера версии происходит, когда FreeBSD переходит с одной значительной версии на другую, как, например, при обновлении с FreeBSD 9.X на FreeBSD 10.X. Оба типа обновлений можно произвести, указав `freebsd-update` версию, на которую нужно перейти.
+* модуль ядра, собранный в версии 13.1, *может* не подойти для версии 13.2.
+
+Итак, при любом обновлении ОС, будь то обновление младшей или старшей версии, если ваш пакет требует включить какой-либо модуль ядра:
+
+* *be prepared to build the module from source*.
+
+====
[NOTE]
====
-Если в системе используется ядро с собственной конфигурацией, убедитесь перед началом обновления в наличии копии ядра [.filename]#GENERIC# в [.filename]#/boot/GENERIC#. Смотрите <<freebsd-update-custom-kernel-9x>> для описания получения копии ядра [.filename]#GENERIC#.
+Если система работает на собственном ядре, убедитесь перед началом обновления, что копия ядра [.filename]#GENERIC# осталась в [.filename]#/boot/GENERIC#. Обратитесь к crossref:cutting-edge[freebsd-update-custom-kernel-9x, Собственные ядра системы в FreeBSD 9.X и более поздних версиях] для получения инструкций о том, как получить копию ядра [.filename]#GENERIC#.
====
-Следующая команда, будучи запущенной на FreeBSD 9.0, выполнит обновление до версии FreeBSD 9.1:
+Перед обновлением до новой версии убедитесь, что текущая установка FreeBSD обновлена с учетом исправлений безопасности и ошибок:
+
+[source, shell]
+....
+# freebsd-update fetch
+# freebsd-update install
+....
+
+Следующая команда, выполненная на системе FreeBSD 13.1, обновит её до версии FreeBSD 13.2:
-[source,shell]
+[source, shell]
....
-# freebsd-update -r 9.1-RELEASE upgrade
+# freebsd-update -r 13.2-RELEASE upgrade
....
-После своего запуска `freebsd-update` анализирует содержимое конфигурационного файла и собирает необходимую для проведения обновления информацию о текущей установленной системе. На экран будет выдан перечень компонентов, которые удалось и не удалось обнаружить установленными. Например:
+После получения команды `freebsd-update` оценит файл конфигурации и текущую систему, чтобы собрать информацию, необходимую для выполнения обновления. На экране появится список компонентов, которые были и не были обнаружены. Например:
-[source,shell]
+[source, shell]
....
Looking up update.FreeBSD.org mirrors... 1 mirrors found.
-Fetching metadata signature for 9.0-RELEASE from update1.FreeBSD.org... done.
+Fetching metadata signature for 13.1-RELEASE from update1.FreeBSD.org... done.
Fetching metadata index... done.
Inspecting system... done.
@@ -231,148 +272,146 @@ world/proflibs
Does this look reasonable (y/n)? y
....
-Следующим шагом `freebsd-update` попытается загрузить по сети файлы, необходимые для выполнения обновления. В некоторых случаях может потребоваться ответить на вопросы относительно того, что и как устанавливать.
+На этом этапе `freebsd-update` попытается загрузить все файлы, необходимые для обновления. В некоторых случаях пользователю могут быть заданы вопросы относительно того, что установить или как продолжить.
-Если используется ядро с собственной конфигурацией, то в этом случае появится предупреждение следующего вида:
+При использовании собственного ядра вышеуказанный шаг вызовет предупреждение, подобное следующему:
-[source,shell]
+[source, shell]
....
WARNING: This system is running a "MYKERNEL" kernel, which is not a
-kernel configuration distributed as part of FreeBSD 9.0-RELEASE.
+kernel configuration distributed as part of FreeBSD 13.1-RELEASE.
This kernel will not be updated: you MUST update the kernel manually
before running "/usr/sbin/freebsd-update install"
....
-На этом этапе предупреждение можно проигнорировать. На промежуточном этапе процесса обновления будет использовано обновлённое ядро [.filename]#GENERIC#.
+Это предупреждение можно безопасно проигнорировать на данном этапе. Обновлённое ядро [.filename]#GENERIC# будет использовано как промежуточный шаг в процессе обновления.
-После того, как все изменения были загружены, они будут применены. Этот процесс может занять определённое время, в зависимости от производительности и текущей загруженности компьютера. Затем будет выполнено слияние конфигурационных файлов. Процесс слияния требует от пользователя определённого вмешательства, так как для файла можно выполнить слияние автоматически, а можно открыть текстовый редактор для слияния вручную. Результат успешного слияния будет показан на экране. Неудачное или пропущенное слияние вызовет преждевременное завершение программы. Можно подготовить резервную копию каталога [.filename]#/etc# для таких важных файлов как [.filename]#master.passwd# и [.filename]#group# и выполнить их слияние вручную позднее.
+После загрузки всех патчей в локальную систему они будут применены. Этот процесс может занять некоторое время в зависимости от скорости и загруженности машины. Затем будут объединены конфигурационные файлы. Процесс объединения требует вмешательства пользователя, так как файл может быть объединен автоматически или на экране появится редактор для ручного объединения. Результаты каждого успешного объединения будут отображаться пользователю по мере выполнения процесса. Неудачное или пропущенное объединение приведет к прерыванию процесса. Пользователям рекомендуется создать резервную копию [.filename]#/etc# и вручную объединить важные файлы, такие как [.filename]#master.passwd# или [.filename]#group#, позже.
[NOTE]
====
-На данном этапе система еще не модифицирована, и все изменения и слияния происходят в отдельном каталоге. Теперь, когда все изменения успешно применены, все конфигурационные файлы объединены и кажется, что процесс должен пройти плавно, изменения могут быть установлены на диск с помощью следующей команды:
+Система пока не изменяется, так как все исправления и слияния происходят в другом каталоге. Как только все исправления будут успешно применены, все конфигурационные файлы объединены и процесс, по всей видимости, пройдёт без проблем, пользователь может записать изменения на диск с помощью следующей команды:
-[source,shell]
+[source, shell]
....
# freebsd-update install
....
====
-В первую очередь изменения будут применены к ядру и его модулям. При использовании ядра с собственной конфигурацией укажите для следующей загрузки обновлённое ядро [.filename]#/boot/GENERIC# с помощью man:nextboot[8]:
+Ядро и модули ядра будут пропатчены первыми. Если система работает с пользовательским ядром, используйте man:nextboot[8], чтобы установить ядро для следующей загрузки в обновлённый [.filename]#/boot/GENERIC#:
-[source,shell]
+[source, shell]
....
# nextboot -k GENERIC
....
[WARNING]
====
-
-Перед перезагрузкой с ядром [.filename]#GENERIC# убедитесь, что оно содержит все необходимые драйвера для системы для корректной загрузки и подключения к сети, если машина обновляется удалённо. В частности, если в ядре содержится встроенная функциональность, которая обычно обеспечивается модулями ядра, загрузите эти драйвера с ядром [.filename]#GENERIC#, временно указав их как модули в [.filename]#/boot/loader.conf#. Рекомендуется отключить несущественные службы, а также любые локальные и сетевые диски до завершения процесса обновления.
+Перед перезагрузкой с ядром [.filename]#GENERIC# убедитесь, что оно содержит все драйверы, необходимые для корректной загрузки системы и подключения к сети, если обновляемая машина доступна удалённо. В частности, если текущее кастомное ядро включает встроенную функциональность, обычно предоставляемую модулями ядра, убедитесь, что временно загрузили эти модули в ядро [.filename]#GENERIC# с помощью механизма [.filename]#/boot/loader.conf#. Также рекомендуется отключить несущественные сервисы, а также любые монтирования дисков и сетевые подключения до завершения процесса обновления.
====
-Теперь компьютер должен быть перезагружен с новым ядром:
+Машину теперь следует перезагрузить с обновлённым ядром:
-[source,shell]
+[source, shell]
....
# shutdown -r now
....
-После перезагрузки нужно повторно запустить команду `freebsd-update`. Команда прочитает, на каком этапе она находится, и перейдёт к удалению старых объектных файлов и совместно используемых библиотек.
+После того как система снова станет доступной, перезапустите `freebsd-update` с помощью следующей команды. Поскольку состояние процесса сохранено, `freebsd-update` начнёт не с начала, а перейдёт к следующему этапу и удалит все старые общие библиотеки и объектные файлы.
-[source,shell]
+[source, shell]
....
# freebsd-update install
....
[NOTE]
====
-Количество этапов установки обновлений может быть два вместо трёх и зависит от того, были ли изменены номера версий каких-либо совместно используемых библиотек.
+В зависимости от того, были ли изменены номера версий библиотек, может быть только две фазы установки вместо трёх.
====
-На этом процесс завершён. Если было выполнено обновление со сменой старшего номера версии, переустановите все порты и пакеты в соответствии с описанием, которое предоставляет <<freebsdupdate-portsrebuild>>.
+Обновление завершено. Если было выполнено обновление старшей версии, переустановите все порты и пакеты, как описано в crossref:cutting-edge[freebsdupdate-portsrebuild,Обновление пакетов после обновления старшей версии].
[[freebsd-update-custom-kernel-9x]]
-==== Собственная конфигурация ядра в FreeBSD 9.X и более поздних версиях
+==== Собственные ядра в FreeBSD 9.X и более поздних версиях
-Перед использованием `freebsd-update` убедитесь в наличии копии ядра [.filename]#GENERIC# в [.filename]#/boot/GENERIC#. Если ядро с собственной конфигурацией было собрано единожды, то в [.filename]#/boot/kernel.old# будет находиться ядро `GENERIC`. Просто переименуйте этот каталог в [.filename]#/boot/kernel#.
+Перед использованием `freebsd-update` убедитесь, что копия ядра [.filename]#GENERIC# осталось в [.filename]#/boot/GENERIC#. Если собственное ядро собиралось только один раз, ядро в [.filename]#/boot/kernel.old# является ядром `GENERIC`. Просто переименуйте этот каталог в [.filename]#/boot/GENERIC#.
-Если ядро с собственной конфигурацией было собрано более одного раза, получите копию ядра `GENERIC`, соответствующую текущей версии операционной системы. При наличии физического доступа копию ядра `GENERIC` можно установить с установочного носителя:
+Если собственное ядро собиралось более одного раза или неизвестно, сколько раз оно пересобиралось, необходимо получить копию ядра `GENERIC`, соответствующую текущей версии операционной системы. Если есть физический доступ к системе, копию ядра `GENERIC` можно установить с установочного носителя:
-[source,shell]
+[source, shell]
....
# mount /cdrom
# cd /cdrom/usr/freebsd-dist
# tar -C/ -xvf kernel.txz boot/kernel/kernel
....
-Иначе, ядро `GENERIC` можно собрать и установить из исходных текстов:
+Или ядро `GENERIC` может быть пересобрано и установлено из исходного кода:
-[source,shell]
+[source, shell]
....
# cd /usr/src
# make kernel __MAKE_CONF=/dev/null SRCCONF=/dev/null
....
-Чтобы такое ядро было определено как ядро `GENERIC` программой `freebsd-update`, в файле конфигурации [.filename]#GENERIC# должны отсутствовать изменения. Также предлагается, что ядро было собрано без использования каких-либо специальных параметров.
+Чтобы ядро было идентифицировано как `GENERIC` с помощью `freebsd-update`, конфигурационный файл [.filename]#GENERIC# не должен быть каким-либо образом изменён. Также рекомендуется собирать ядро без каких-то дополнительных специальных опций.
-Загрузка с [.filename]#GENERIC# не требуется, поскольку для `freebsd-update` достаточно существования [.filename]#/boot/GENERIC#.
+Перезагрузка с ядром [.filename]#GENERIC# не требуется, так как `freebsd-update` нужен только файл [.filename]#/boot/GENERIC#.
[[freebsdupdate-portsrebuild]]
-==== Обновление пакетов после смены старшей версии системы
+==== Обновление пакетов после обновления старшей версии
-После обновления системы со сменой младшей версии установленные приложения, в целом, продолжают работать без каких-либо проблем. Различные старшие версии используют различающиеся двоичные интерфейсы приложений (Application Binary Interface, ABI), из-за чего перестаёт работать большинство сторонних приложений. После обновления системы со сменой старшей версии все установленные пакеты и порты также нуждаются в обновлении. Пакеты можно обновить с использованием `pkg upgrade`. Для обновления установленных портов используется package:ports-mgmt/portmaster[].
+Обычно установленные приложения продолжают работать без проблем после обновления младших версий. Старшие версии используют разные бинарные интерфейсы приложений (ABI), что приведёт к неработоспособности большинства сторонних приложений. После обновления старшей версии необходимо обновить все установленные пакеты и порты. Пакеты можно обновить с помощью `pkg upgrade`. Для обновления установленных портов используйте утилиты, например package:ports-mgmt/portmaster[].
-Принудительное обновление все установленных пакетов приведёт к их замене на последние версии из репозитория, даже если номер версии при этом не увеличивался. Это требуется из-за смены версии ABI при обновлении на другую старшую версию FreeBSD. Принудительное обновление можно выполнить так:
+Принудительное обновление всех установленных пакетов заменит пакеты на новые версии из репозитория, даже если номер версии не увеличился. Это необходимо из-за изменения версии ABI при обновлении между старшими версиями FreeBSD. Принудительное обновление можно выполнить с помощью команды:
-[source,shell]
+[source, shell]
....
# pkg-static upgrade -f
....
-Перестроение всех установленных приложений можно выполнить этой командой:
+Перестройка всех приложений, установленных из коллекции портов, может быть выполнена с помощью следующей команды:
-[source,shell]
+[source, shell]
....
# portmaster -af
....
-Эта команда будет отображать экран выбора конфигурации для каждого приложения, в котором доступны параметры конфигурации, с ожиданием пользовательского ввода. Чтобы не использовать такое поведение и всегда выбирать параметры по умолчанию, добавьте ключ `-G` в вышеприведённую команду.
+Эта команда отобразит экраны конфигурации для каждого приложения, имеющего настраиваемые параметры, и будет ожидать взаимодействия пользователя с этими экранами. Чтобы предотвратить такое поведение и использовать только параметры по умолчанию, добавьте `-G` в указанную выше команду.
-После завершения процесса обновления программного обеспечения закончите процесс обновления последним запуском `freebsd-update`, для того чтобы убедиться, что ничто не было пропущено в процессе обновления:
+После завершения обновления программного обеспечения завершите процесс обновления, выполнив последний вызов `freebsd-update`, чтобы устранить все нерешенные вопросы, оставшиеся в процессе обновления:
-[source,shell]
+[source, shell]
....
# freebsd-update install
....
-Если в качестве временной меры использовалось ядро [.filename]#GENERIC#, то это подходящее время для построения и установки нового ядра с собственной конфигурацией в соответствии с инструкциями в crossref:kernelconfig[kernelconfig, Настройка ядра FreeBSD].
+Если временно использовалось ядро [.filename]#GENERIC#, сейчас самое время собрать и установить новое пользовательское ядро, следуя инструкциям из раздела crossref:kernelconfig[kernelconfig,Настройка ядра FreeBSD].
-Перезагрузите машину с новой версией FreeBSD. На этом процесс обновления завершён.
+Перезагрузите машину с новой версией FreeBSD. Процесс обновления завершен.
[[freebsdupdate-system-comparison]]
=== Сравнение состояния системы
-С помощью команды `freebsd-update IDS` можно получить состояние установленной версии FreeBSD относительно известной доверенной копии. Эта команда проверяет текущую версию системных утилит, библиотек и конфигурационных файлов, и её можно использовать в качестве встроенной системы обнаружения вторжений (Intrusion Detection System, IDS).
+Состояние установленной версии FreeBSD можно проверить с помощью `freebsd-update IDS`, сравнив его с известной исправной копией. Эта команда оценивает текущие версии системных утилит, библиотек и конфигурационных файлов и может использоваться как встроенная система обнаружения вторжений (IDS — Intrusion Detection System).
[WARNING]
====
-
-Эта команда не является заменой IDS, такой как package:security/snort[]. Поскольку `freebsd-update` сохраняет свои данные на диске, возможность подмены становится очевидной. И хотя эта возможность может быть уменьшена при использовании настройки `kern.securelevel`, а также используя для записи данных `freebsd-update` файловую систему, которая в остальное время смонтирована только на чтение, лучшим решением будет сравнить систему относительно эталона на физически защищенном носителе, таком как DVD или внешний USB диск с включённой защитой от записи.
+Эта команда не является заменой настоящей системы обнаружения вторжений, такой как package:security/snort[]. Поскольку `freebsd-update` хранит данные на диске, возможность их подделки очевидна. Хотя эту возможность можно уменьшить, используя `kern.securelevel` и сохраняя данные `freebsd-update` на файловой системе только для чтения, когда они не используются, лучшее решение — сравнить систему с защищённым диском, таким как DVD или надёжно хранимое внешнее USB-устройство. Альтернативный метод обеспечения функциональности системы обнаружения вторжений с использованием встроенной утилиты описан в crossref:security[security-ids,"Проверка двоичных файлов"]
====
-Для того, чтобы начать сравнение, укажите файл для сохранения результатов:
+Для начала сравнения укажите выходной файл для сохранения результатов:
-[source,shell]
+[source, shell]
....
# freebsd-update IDS >> outfile.ids
....
-Запустится проверка системы, результат которой будет записан в указанный файл в виде списка файлов вместе с их контрольными суммами в формате SHA256 - для известных файлов из релиза и текущих в системе.
+Система будет проверена, и в указанный выходной файл будет отправлен длинный список файлов вместе с хеш-значениями SHA256, как для известного значения в релизе, так и для текущей установки.
-Строки в списке чрезмерно длинные, но зато такой формат вывода удобен для разбора. Так, для получения списка всех отличающихся от релиза файлов достаточно выполнить такую команду:
+Записи в списке очень длинные, но формат вывода легко анализировать. Например, чтобы получить список всех файлов, которые отличаются от файлов в выпуске, выполните следующую команду:
-[source,shell]
+[source, shell]
....
# cat outfile.ids | awk '{ print $1 }' | more
/etc/master.passwd
@@ -381,678 +420,553 @@ before running "/usr/sbin/freebsd-update install"
/etc/pf.conf
....
-Вывод специально обрезан, на самом деле файлов намного больше. Некоторые из них изменены в ходе нормальной работы: так, файл [.filename]#/etc/passwd# был изменён после заведения пользователей в системе. Модули ядра могли измениться вследствие обновления через `freebsd-update`. Для исключения из проверки конкретных файлов и каталогов укажите их в качестве значения параметра `IDSIgnorePaths` в [.filename]#/etc/freebsd-update.conf#.
+Этот пример вывода был сокращён, так как существует гораздо больше файлов. Некоторые файлы имеют естественные изменения. Например, [.filename]#/etc/passwd# будет изменён, если в систему были добавлены пользователи. Модули ядра могут отличаться, так как `freebsd-update` мог их обновить. Чтобы исключить определённые файлы или каталоги, добавьте их в параметр `IDSIgnorePaths` в файле [.filename]#/etc/freebsd-update.conf#.
+
+[[updating-bootcode]]
+== Обновление загрузочного кода
+
+Следующие руководства описывают процесс обновления загрузочного кода и загрузчиков: man:gpart[8], man:gptboot[8], man:gptzfsboot[8] и man:loader.efi[8].
[[updating-upgrading-documentation]]
== Обновление документации
-Документация является неотъемлемой частью операционной системы FreeBSD. И хотя актуальная версия документации FreeBSD всегда доступна на сайте FreeBSD (link:https://www.FreeBSD.org/doc/[http://www.freebsd.org/doc/]), может быть удобно иметь под рукой актуальную локальную копию сайта FreeBSD, руководств, FAQ и статей.
+Документация является неотъемлемой частью операционной системы FreeBSD. Хотя актуальная версия документации FreeBSD всегда доступна на сайте FreeBSD (link:https://docs.FreeBSD.org[Портал документации]), может быть удобно иметь актуальную локальную копию веб-сайта FreeBSD, руководств, FAQ и статей.
-В этом разделе описывается, как использовать исходный текст или Коллекцию Портов FreeBSD для организации актуальной локальной копии документации FreeBSD.
+Этот раздел описывает, как использовать исходный код или коллекцию портов FreeBSD для поддержания локальной копии документации FreeBSD в актуальном состоянии.
-За информацией о редактировании и отправке изменений для документации обращайтесь к FreeBSD Documentation Project Primer for New Contributors (extref:{fdp-primer}[FreeBSD Documentation Project Primer]).
+Для получения информации о редактировании и отправке исправлений в документацию обратитесь к руководству "Проект документации FreeBSD: введение для новых участников" (extref:{fdp-primer}[Проект документации FreeBSD: введение для новых участников]).
[[updating-installed-documentation]]
-=== Обновление документации из исходного кода
+=== Обновление документации из исходных текстов
-Для перестроения документации FreeBSD из исходного текста требуется набор инструментов, который не является частью основной системы FreeBSD. Требуемые инструменты, включая svn, можно установить из пакета или порта package:textproc/docproj[], разработанного в рамках проекта документации FreeBSD.
+Пересборка документации FreeBSD из исходных текстов требует набора инструментов, которые не входят в базовую систему FreeBSD. Необходимые инструменты можно установить, следуя extref:{fdp-primer}[этим шагам, overview-quick-start] из вводного руководства Проекта документации FreeBSD.
-После установки используйте svn для получения копии исходных текстов документации:
+После установки используйте `git`, чтобы получить чистую копию исходного кода документации:
-[source,shell]
+[source, shell]
....
-# svn checkout https://svn.FreeBSD.org/doc/head /usr/doc
+# git clone https://git.FreeBSD.org/doc.git /usr/doc
....
-Первоначальная загрузка исходных текстов документации может занять некоторое время. Дайте ей завершиться.
+Первоначальная загрузка исходного кода документации может занять некоторое время. Дождитесь завершения процесса.
-Последующие обновления можно получить, выполнив:
+Будущие обновления исходного кода документации можно получить, выполнив:
-[source,shell]
+[source, shell]
....
-# svn update /usr/doc
+# git pull
....
-После того как в [.filename]#/usr/doc# была загружена актуальная копия исходных текстов, всё готово для обновления установленной документации.
+После того как актуальный снимок исходников документации будет загружен в [.filename]#/usr/doc#, всё готово для обновления установленной документации.
-Полное обновление всех доступных языковых версий можно выполнить, набрав команду:
+Полное обновление можно выполнить, набрав:
-[source,shell]
+[source, shell]
....
# cd /usr/doc
-# make install clean
+# make
....
-Для обновления только указанной языковой версии команду `make` можно запустить в соответствующем подкаталоге [.filename]#/usr/doc#:
-
-[source,shell]
-....
-# cd /usr/doc/en_US.ISO8859-1
-# make install clean
-....
-
-Альтернативный способ обновления документации заключается в запуске следующей команды из из [.filename]#/usr/doc# или подкаталога с желаемой языковой версией:
+[[current-stable]]
+== Отслеживание ветки разработки
-[source,shell]
-....
-# make update
-....
+FreeBSD имеет две ветви разработки: FreeBSD-CURRENT и FreeBSD-STABLE.
-Используемый при установке формат можно указать через `FORMATS`:
+Этот раздел содержит объяснение каждой ветки и её целевой аудитории, а также инструкции по поддержанию системы в актуальном состоянии для каждой из веток.
-[source,shell]
-....
-# cd /usr/doc
-# make FORMATS='html html-split' install clean
-....
+[[current]]
+=== Использование FreeBSD-CURRENT
-Для упрощения процесса частичного обновления документации и построения только нужных переводов имеется несколько параметров. Их можно задать как на общесистемном уровне, указав в [.filename]#/etc/make.conf#, так и непосредственно в команде `make`.
+FreeBSD-CURRENT — это "передовой край" разработки FreeBSD, и от пользователей FreeBSD-CURRENT ожидается высокий уровень технической подготовки. Менее опытным пользователям, которые хотят следить за веткой разработки, рекомендуется использовать FreeBSD-STABLE.
-Данные параметры включают:
+FreeBSD-CURRENT - это самые последние исходные коды FreeBSD, включающие текущие работы, экспериментальные изменения и переходные механизмы, которые могут как присутствовать, так и отсутствовать в следующем официальном выпуске. Хотя многие разработчики FreeBSD компилируют исходный код FreeBSD-CURRENT ежедневно, бывают короткие периоды, когда сборка кода может быть невозможна. Эти проблемы решаются как можно быстрее, но приведёт ли FreeBSD-CURRENT к катастрофе или новым возможностям, может зависеть от того, когда исходный код был синхронизирован.
-`DOC_LANG`::
-Перечень языков и кодировок для построения и установки, например, `en_US.ISO8859-1` для англоязычной документации.
+FreeBSD-CURRENT доступен для трёх основных групп пользователей:
-`FORMATS`::
-Единый формат или набор форматов для построения. На данный момент поддерживаются `html`, `html-split`, `txt`, `ps` и `pdf`.
+. Участники сообщества FreeBSD, которые активно работают над какой-либо частью дерева исходного кода.
+. Участники сообщества FreeBSD, которые активно тестируют. Они готовы тратить время на решение проблем, высказывать тематические предложения по изменениям и общему направлению развития FreeBSD, а также предоставлять патчи.
+. Пользователи, которые хотят следить за происходящим, использовать текущие исходные коды для справки или иногда делать комментарии или вклад в код.
-`DOCDIR`::
-Путь для установки документации. По умолчанию [.filename]#/usr/shared/doc#.
+Версия FreeBSD-CURRENT _не_ должна рассматриваться как быстрый способ получить новые функции до следующего релиза, так как предрелизные функции ещё не полностью протестированы и, скорее всего, содержат ошибки. Это не быстрый способ исправления багов, так как каждый коммит с такой же вероятностью может добавить новые ошибки, как и исправить существующие. FreeBSD-CURRENT ни в коем случае не является "официально поддерживаемой".
-Для получения других переменных `make`, также работающих во FreeBSD в качестве общесистемных, обратитесь к man:make.conf[5].
+Для отслеживания FreeBSD-CURRENT:
-[[doc-ports-install-package]]
-=== Обновление документации из портов
+. Присоединитесь к спискам рассылки {freebsd-current} и {dev-commits-src-main}. Это _важно_ для того, чтобы видеть комментарии пользователей о текущем состоянии системы и получать важные уведомления о состоянии FreeBSD-CURRENT.
++
+Список {dev-commits-src-main} фиксирует запись журнала изменений для каждого внесённого изменения, а также любую сопутствующую информацию о возможных побочных эффектах.
++
+Чтобы присоединиться к этим спискам, перейдите на {mailing-lists}, выберите список, к которому хотите подписаться, и следуйте инструкциям. Для отслеживания изменений во всём дереве исходного кода, а не только в FreeBSD-CURRENT, подпишитесь на {dev-commits-src-all}.
+. Синхронизация с исходным кодом FreeBSD-CURRENT. Обычно для получения кода -CURRENT из ветки `main` репозитория FreeBSD Git используется `git` (подробности см. в crossref:mirrors[git,“Использование Git”]).
+. Из-за размера репозитория некоторые пользователи предпочитают синхронизировать только те разделы исходного кода, которые их интересуют или для которых они готовят патчи. Однако пользователи, планирующие собирать операционную систему из исходных кодов, должны загрузить _весь_ FreeBSD-CURRENT, а не только отдельные его части.
++
+Перед компиляцией FreeBSD-CURRENT внимательно прочитайте [.filename]#/usr/src/Makefile# и следуйте инструкциям в crossref:cutting-edge[makeworld,Обновление FreeBSD из исходного кода]. Ознакомьтесь с {freebsd-current} и [.filename]#/usr/src/UPDATING#, чтобы быть в курсе других процедур начальной загрузки, которые иногда становятся необходимыми на пути к следующему выпуску.
+. Будьте активными! Пользователям FreeBSD-CURRENT рекомендуется предлагать свои идеи по улучшению или исправлению ошибок. Предложения с приложенным кодом всегда приветствуются.
-В предыдущем разделе был представлен метод обновления документации FreeBSD из исходных текстов. В этом разделе описывается альтернативный метод с использованием Коллекции Портов, который позволяет:
+[[stable]]
+=== Использование FreeBSD-STABLE
-* Установить предварительно собранный пакет документации без необходимости локального построения чего-либо или установки инструментария документации.
-* Выполнить построение исходных текстов документации через инфраструктуру портов, что несколько упрощает этапы загрузки и построения.
+FreeBSD-STABLE - это ветка разработки, из которой создаются основные выпуски. Изменения попадают в эту ветку медленнее и с общим предположением, что они сначала были протестированы в FreeBSD-CURRENT. Это _всё ещё_ ветка разработки, и в любой момент исходный код FreeBSD-STABLE может быть или не быть пригодным для общего использования. Это просто ещё один инженерный трек разработки, а не ресурс для конечных пользователей. Пользователям, у которых нет ресурсов для тестирования, следует использовать последний выпуск FreeBSD.
-Данный метод обновления документации FreeBSD предоставляется портами и пакетами документации, которые ежемесячно обновляет {doceng}. Они перечислены в Коллекции Портов FreeBSD в категории docs (http://www.freshports.org/docs/[http://www.freshports.org/docs/]).
+Те, кто заинтересован в отслеживании или участии в процессе разработки FreeBSD, особенно в контексте следующего выпуска FreeBSD, могут рассмотреть возможность подписки на FreeBSD-STABLE.
-Порты документации организованы следующим образом:
+Хотя ветка FreeBSD-STABLE должна компилироваться и работать в любое время, это не может быть гарантировано. Поскольку больше людей используют FreeBSD-STABLE, чем FreeBSD-CURRENT, неизбежно, что иногда в FreeBSD-STABLE будут обнаружены ошибки и крайние случаи, которые не были очевидны в FreeBSD-CURRENT. По этой причине не следует слепо следовать за FreeBSD-STABLE. Особенно важно _не_ обновлять какие-либо производственные серверы до FreeBSD-STABLE без тщательного тестирования кода в среде разработки или тестирования.
-* Пакет или порт package:misc/freebsd-doc-en[] устанавливает всю англоязычную документацию.
-* Метапакет или порт package:misc/freebsd-doc-all[] устанавливает всю документацию на всех доступных языках.
-* Имеются пакеты и порты для каждого перевода, например, package:misc/freebsd-doc-hu[] для венгерской документации.
+Для отслеживания FreeBSD-STABLE:
-При использовании двоичных пакетов документация FreeBSD будет установлена во всех доступных форматах для данного языка. Например, следующая команда установит последнюю версию пакета венгерской документации:
+. Присоединяйтесь к рассылке {freebsd-stable}, чтобы быть в курсе зависимостей сборки, которые могут появиться в FreeBSD-STABLE, или других вопросов, требующих особого внимания. Разработчики также будут объявлять в этой рассылке о рассмотрении спорных исправлений или обновлений, давая пользователям возможность высказаться, если у них есть замечания по предлагаемым изменениям.
++
+Присоединяйтесь к соответствующему списку рассылки git для отслеживаемой ветки. Например, пользователи, отслеживающие ветку {betarel-current-major}-STABLE, должны подписаться на {dev-commits-src-branches}. Этот список рассылает сообщения с комментарием коммита для каждого внесённого изменения, как только оно сделано, а также любую соответствующую информацию о возможных побочных эффектах.
++
+Чтобы присоединиться к этим спискам, перейдите на {mailing-lists}, выберите список для подписки и следуйте инструкциям. Для отслеживания изменений во всём дереве исходного кода подпишитесь на {dev-commits-src-all}.
+. Для установки новой системы FreeBSD-STABLE установите последний выпуск FreeBSD-STABLE с crossref:mirrors[mirrors,сайтов зеркал FreeBSD] или используйте ежемесячный снимок, собранный из FreeBSD-STABLE. Дополнительную информацию о снимках можно найти на link:https://www.FreeBSD.org/snapshots/[www.freebsd.org/snapshots].
++
+Для компиляции или обновления существующей системы FreeBSD до FreeBSD-STABLE используйте `git` для получения исходного кода нужной ветки. Имена веток, например `stable/13`, перечислены на сайте link:https://www.FreeBSD.org/releng/[www.freebsd.org/releng].
+. Перед компиляцией или обновлением до FreeBSD-STABLE внимательно прочитайте файл [.filename]#/usr/src/Makefile# и следуйте инструкциям в crossref:cutting-edge[makeworld,Обновление FreeBSD из исходного кода]. Ознакомьтесь с {freebsd-stable} и файлом [.filename]#/usr/src/UPDATING#, чтобы быть в курсе других процедур начальной загрузки, которые иногда становятся необходимыми на пути к следующему выпуску.
-[source,shell]
+[[translate-n-number]]
+=== N-номер
+При поиске ошибок важно знать, какие версии исходного кода использовались для создания системы, в которой обнаружена проблема. FreeBSD предоставляет информацию о версии, встроенную в ядро. man:uname[1] извлекает эту информацию, например:
+[source, shell]
....
-# pkg install hu-freebsd-doc
+% uname -v
+FreeBSD 14.0-CURRENT #112 main-n247514-031260d64c18: Tue Jun 22 20:43:19 MDT 2021 fred@machine:/usr/home/fred/obj/usr/home/fred/git/head/amd64.amd64/sys/FRED
....
+Последнее поле содержит информацию о названии ядра, человеке, который его собрал, и месте, где оно было скомпилировано. Рассматривая 4-е поле, можно увидеть, что оно состоит из нескольких частей:
+[source, shell]
+....
+main-n247514-031260d64c18
-[NOTE]
-====
-Для пакетов используется другая схема наименования, которая отличается от названия соответствующего порта: `_lang_-freebsd-doc`, где _lang_ соответствует сокращённому языковому коду, такому как `hu` для венгерского или `zh_cn` для упрощённого китайского.
-====
-
-Чтобы указать используемый формат документации, для этого вместо установки готового пакета нужно собрать порт самостоятельно. Ниже приводится пример построения и установки английской документации:
+main <.>
+n247514 <.>
+031260d64c18 <.>
+ <.>
+....
+<.> Имя ветки Git. Примечание: сравнения n-номеров действительны только для веток, опубликованных проектом (`main`, `stable/XX` и `releng/XX`). Локальные ветки будут иметь n-номера, которые могут пересекаться с коммитами их родительской ветки.
+<.> n-номер — это линейный счетчик коммитов от начала репозитория Git, начиная с хэша Git, указанного в строке.
+<.> Хэш Git дерева исходного кода
+<.> Иногда добавляется суффикс `-dirty`, если ядро было собрано в дереве с незафиксированными изменениями. В данном примере он отсутствует, так как ядро FRED было собрано из чистой копии репозитория.
-[source,shell]
+Команда `git rev-list` используется для нахождения n-номера, соответствующего хэшу Git. Например:
+[source, shell]
....
-# cd /usr/ports/misc/freebsd-doc-en
-# make install clean
+% git rev-list --first-parent --count 031260d64c18 <.>
+247514 <.>
....
+<.> Хеш git для перевода (используется тот же хеш из приведённого выше примера)
+<.> n-номер.
-В порте имеется меню конфигурации, в котором можно указать нужный формат. По умолчанию выбирается HTML с разделителями, такой как на http://www.FreeBSD.org[http://www.FreeBSD.org], а также PDF.
+Обычно этот номер не так важен. Однако, когда фиксы ошибок попадают в репозиторий, это число позволяет быстро определить, присутствует ли исправление в текущей работающей системе. Разработчики часто ссылаются на хэш коммита (или предоставляют URL, содержащий этот хэш), но не указывают n-номер, так как хэш является легко видимым идентификатором изменения, в отличие от n-номера. В уведомлениях о безопасности и бюллетенях исправлений также указывается n-номер, который можно напрямую сравнить с вашей системой. Если вы используете неполные (shallow) клоны Git, вы не сможете надежно сравнивать n-номера, так как команда `git rev-list` подсчитывает все ревизии в репозитории, которые неполный клон пропускает.
-Иначе, при построении порта документации можно указать параметры `make`, которые включают в себя:
+[[makeworld]]
+== Обновление FreeBSD из исходного кода
-`WITH_HTML`::
-Документ в формате HTML на одной странице. Сформированная документация сохраняется в файле [.filename]#article.html# или [.filename]#book.html#.
+Обновление FreeBSD путем компиляции из исходного кода предоставляет несколько преимуществ по сравнению с бинарными обновлениями. Код может быть собран с опциями, позволяющими использовать преимущества конкретного оборудования. Части базовой системы могут быть собраны с нестандартными настройками или полностью исключены, если они не нужны или нежелательны. Процесс сборки занимает больше времени для обновления системы по сравнению с установкой бинарных обновлений, но позволяет полностью настроить систему для создания адаптированной версии FreeBSD.
-`WITH_PDF`::
-Сформированная документация сохраняется в файле [.filename]#article.pdf# или [.filename]#book.pdf#.
+[[updating-src-quick-start]]
+=== Быстрый старт
-`DOCBASE`::
-Указывает место размещения документации. По умолчанию [.filename]#/usr/local/shared/doc/freebsd#.
+Это краткая справка по типовым шагам, используемым для обновления FreeBSD путем сборки из исходного кода. Более подробное описание процесса приведено в следующих разделах.
-В примере ниже демонстрируется использование переменных для установки венгерской документации в PDF в указанный каталог:
+[WARNING]
+====
+При переходе с man:mergemaster[8] на man:etcupdate[8] первый запуск может некорректно объединить изменения, создавая ложные конфликты. Чтобы избежать этого, выполните следующие действия *перед* обновлением исходных кодов и сборкой нового мира:
-[source,shell]
+[source, shell]
....
-# cd /usr/ports/misc/freebsd-doc-hu
-# make -DWITH_PDF DOCBASE=share/doc/freebsd/hu install clean
+# etcupdate extract <.>
+# etcupdate diff <.>
....
-Пакеты или порты документации обновляются согласно инструкциям в crossref:ports[ports, Установка приложений. порты и пакеты]. Например, следующая команда выполняет обновление установленной документации на венгерском языке с помощью package:ports-mgmt/portmaster[] в режиме использования только готовых пакетов:
+<.> Загрузите базы данных стандартных файлов [.filename]#/etc#; дополнительную информацию смотрите в man:etcupdate[8].
+
+<.> Проверьте изменения после начальной настройки. Удалите все локальные изменения, которые больше не нужны, чтобы уменьшить вероятность конфликтов при будущих обновлениях.
+====
-[source,shell]
+[.procedure]
+====
+* Обновление и сборка
++
+[source, shell]
....
-# portmaster -PP hu-freebsd-doc
+# git -C /usr/src pull <.>
+check /usr/src/UPDATING <.>
+# cd /usr/src <.>
+# make -j4 buildworld <.>
+# make -j4 kernel <.>
+# shutdown -r now <.>
+# etcupdate -p <.>
+# cd /usr/src <.>
+# make installworld <.>
+# etcupdate -B <.>
+# shutdown -r now <.>
....
-[[current-stable]]
-== Использование ветви разработки
+<.> Получите последнюю версию исходного кода. Подробнее о получении и обновлении исходного кода см. в crossref:cutting-edge[updating-src-obtaining-src, Обновление исходного кода].
-Во FreeBSD имеется две ветки разработки: FreeBSD-CURRENT и FreeBSD-STABLE.
+<.> Проверьте [.filename]#/usr/src/UPDATING# на наличие необходимых действий перед или после сборки из исходного кода.
-В этом разделе даётся объяснение для каждой из них и их предназначение, а также рассказывается, как синхронизировать систему с любой из этих веток.
+<.> Перейдите в исходный каталог.
-[[current]]
-=== Использование FreeBSD-CURRENT
+<.> Соберите систему (world), всё кроме ядра системы.
-FreeBSD-CURRENT является "передним краем" разработки FreeBSD и предназначена для пользователей с высокой технической грамотностью. Менее продвинутым пользователям, также желающим отслеживать ветку разработки, следует использовать FreeBSD-STABLE.
+<.> Скомпилируйте и установите ядро системы. Это эквивалентно `make buildkernel installkernel`.
-FreeBSD-CURRENT обозначает последнюю версию исходных текстов FreeBSD и включает в себя незавершённые работы, экспериментальные изменения и переходные механизмы, которые могут отсутствовать в следующем официальном релизе. Хотя многие разработчики FreeBSD выполняют компиляцию исходных текстов FreeBSD-CURRENT ежедневно, бывают периоды, когда исходные тексты могут не компилироваться. Обычно такие проблемы решаются сразу по мере возможности, но всё же выбор точки синхронизации исходных текстов является определяющим фактором, содержит ли FreeBSD-CURRENT новую функциональность или же мину замедленного действия.
+<.> Перезагрузите систему с новым ядром.
-FreeBSD-CURRENT предназначена для трёх основных групп:
+<.> Обновите и объедините конфигурационные файлы в [.filename]#/etc/#, это обязательно перед выполнением installworld.
-. Члены сообщества FreeBSD, активно работающие над некоторой частью дерева исходных текстов.
-. Члены сообщества FreeBSD, которые являются активными тестерами. Они тратят свое время на исправление проблем, вносят важные предложения по изменениям и общему развитию FreeBSD, присылают патчи.
-. Пользователи, которые хотят быть в курсе изменений, используют текущие исходные тексты для ознакомительных целей либо же иногда высказывают замечания или предоставляют собственный код.
+<.> Перейдите в исходный каталог.
-FreeBSD-CURRENT _не_ должна использоваться в качестве быстрого способа получить новые возможности, не дожидаясь выпуска следующей версии, поскольку предварительная версия не является полностью проверенной и скорее всего содержит ошибки. FreeBSD-CURRENT не является быстрым способом получения исправлений, поскольку любое изменение является в равной мере источником исправления существующих ошибок и появления новых. FreeBSD-CURRENT не является "официально поддерживаемой" каким бы то ни было способом.
+<.> Установить систему (world).
-Чтобы отслеживать изменения во FreeBSD-CURRENT:
+<.> Обновите и объедините конфигурационные файлы в [.filename]#/etc/#.
-. Подпишитесь на списки рассылки {freebsd-current} и {svn-src-head}. Это _необходимо_ для того, чтобы получать сообщения и важные бюллетени относительно текущего состояния FreeBSD-CURRENT.
-+
-Список рассылки {svn-src-head} содержит записи из журнала коммитов по каждому изменению, а также сопутствующую информацию о возможных побочных эффектах.
-+
-Чтобы подписаться на эти списки рассылки, перейдите по ссылке {mailing-lists-url}, щёлкните на нужном списке и следуйте дальнейшим инструкциям. Для того чтобы отслеживать изменения всего дерева исходных текстов, а не только FreeBSD-CURRENT, подпишитесь на {svn-src-all}.
-. Загрузите исходные тексты FreeBSD-CURRENT. Обычно для этого используется crossref:mirrors[svn,svn], с помощью которого можно загрузить исходные тексты -CURRENT из ветки `head` с одного из зеркал Subversion, перечисленных в crossref:mirrors[svn-mirrors,Сайты зеркала Subversion].
-+
-Пользователи с очень медленным или ограниченным подключением могут рассматривать использование CTM, который описывается в crossref:mirrors[ctm,Использование CTM], однако этот способ является менее надёжным по сравнению с рекомендуемым способом синхронизации исходных текстов посредством svn.
-. Вследствие больших размеров репозитория некоторые пользователи для ознакомления или изготовления патчей выбирают частичную загрузку. Тем не менее, для компиляции операционной системы из исходных текстов требуется загрузить FreeBSD-CURRENT _полностью_, а не только лишь выбранные части.
-+
-Перед началом компиляции FreeBSD-CURRENT внимательно прочтите файл [.filename]#/usr/src/Makefile# и следуйте инструкциям в <<makeworld>>. {freebsd-current} и [.filename]#/usr/src/UPDATING# позволят быть в курсе прочих процедур, которые иногда бывают необходимы в процессе перехода к следующему релизу.
-. Будьте активным участником! Пользователям FreeBSD-CURRENT предлагается высказывать свои соображения по улучшению или исправлению ошибок. Предложения, к которым прилагается код, всегда приветствуются!
+<.> Перезагрузите систему для использования новой собранной системы (world) и ядра.
+====
-[[stable]]
-=== Использование FreeBSD-STABLE
+[[updating-src-preparing]]
+=== Подготовка к обновлению исходного кода
-FreeBSD-STABLE является веткой разработки, из которой выпускаются основные релизы. Изменения в этой ветке происходят с меньшей скоростью и в предположении, что они сперва были проверены во FreeBSD-CURRENT. При этом она _остаётся_ веткой разработки, и в любой момент времени исходные тексты FreeBSD-STABLE могут оказаться не готовы для обычного использования. Это просто другая ветка разработки, не предназначенная для конечных пользователей. Пользователям, у которых нет возможности заниматься тестированием, следует использовать самый последний выпуск FreeBSD.
+Прочитайте файл [.filename]#/usr/src/UPDATING#. В этом файле описаны все необходимые действия, которые нужно выполнить до или после обновления.
-Тем, кто заинтересован процессом разработки FreeBSD или желает поучаствовать, особенно поскольку от этого зависит следующий релиз FreeBSD, стоит отслеживать FreeBSD-STABLE.
+[[updating-src-obtaining-src]]
+=== Обновление исходного кода
-Хотя ветка FreeBSD-STABLE должна всегда компилироваться и работать, это невозможно гарантировать. Поскольку гораздо больше людей работает с FreeBSD-STABLE, неудивительно, что в FreeBSD-STABLE иногда обнаруживаются ошибки и всплывают непредвиденные ситуации, которые не проявляли себя в FreeBSD-CURRENT. По этим причинам не рекомендуется слепо использовать FreeBSD-STABLE. Особенно важно _не_ обновлять какие-либо сервера, находящиеся в эксплуатации, до FreeBSD-STABLE без тщательного тестирования кода в среде разработки.
+Исходный код FreeBSD находится в [.filename]#/usr/src/#. Предпочтительный метод обновления этого исходного кода — через систему управления версиями Git. Проверьте, что исходный код находится под управлением версий:
-Чтобы отслеживать изменения во FreeBSD-STABLE:
+[source, shell]
+....
+# cd /usr/src
+# git remote --v
+origin https://git.freebsd.org/src.git (fetch)
+origin https://git.freebsd.org/src.git (push)
+....
-. Подпишитесь на список рассылки {freebsd-stable}, чтобы быть в курсе о зависимостях процесса компиляции, которые могут появиться во FreeBSD-STABLE или любых других проблемах, требующих особого внимания. Также в этом списке рассылки разработчики делают объявления о спорных исправлениях или добавлениях, давая пользователям возможность высказать свое мнение о возможных тонких моментах.
-+
-Подпишитесь на список рассылки svn, соответствующий используемой ветви. Например, при использовании 9-STABLE следует подписаться на {svn-src-stable-9}. Этот список рассылки содержит записи из журнала коммитов по каждому изменению, а также сопутствующую информацию о возможных побочных эффектах.
-+
-Чтобы подписаться на эти списки рассылки, перейдите по ссылке {mailing-lists-url}, щёлкните на нужном списке, и следуйте дальнейшим инструкциям. Для того чтобы отслеживать изменения всего дерева исходных текстов, подпишитесь на {svn-src-all}.
-. Чтобы установить новую систему FreeBSD-STABLE, установите самый последний релиз FreeBSD-STABLE, загрузив его с crossref:mirrors[mirrors,зеркалирующих сайтов FreeBSD] или используйте ежемесячную стандартную сборку FreeBSD-STABLE. Обратитесь к link:https://www.FreeBSD.org/snapshots/[www.freebsd.org/snapshots] для получения дополнительной информации о снэпшотах.
-+
-Чтобы скомпилировать новую или обновить существующую систему FreeBSD до FreeBSD-STABLE, используйте crossref:mirrors[svn,svn] для загрузки исходных текстов нужной ветки. Имена веток вида `stable/9` перечислены на странице link:https://www.FreeBSD.org/releng/[www.freebsd.org/releng]. При отсутствии надёжного Интернет-соединения можно воспользоваться CTM (crossref:mirrors[ctm,Использование CTM]).
-. Перед началом компиляции или обновления до FreeBSD-STABLE внимательно прочтите файл [.filename]#/usr/src/Makefile# и следуйте инструкциям в <<makeworld>>. {freebsd-stable} и [.filename]#/usr/src/UPDATING# позволят быть в курсе прочих процедур, которые иногда бывают необходимы в процессе перехода к следующему релизу.
+Это указывает, что [.filename]#/usr/src/# находится под управлением версий и может быть обновлён с помощью man:git[1]:
[[synching]]
-== Синхронизация исходных текстов
+[source, shell]
+....
+# git -C /usr/src pull
+....
-Имеются различные способы синхронизации с исходными текстами FreeBSD. В этом разделе сравниваются основные из них, Subversion и CTM.
+Процесс обновления может занять некоторое время, если каталог не обновлялся в течение долгого периода. После завершения исходный код будет актуальным, и можно приступать к процессу сборки, описанному в следующем разделе.
-[WARNING]
+[NOTE]
====
+Получение исходного кода:
-Хотя возможно частичное обновление дерева исходных текстов, единственной поддерживаемой процедурой обновления является обновление всего дерева и перекомпиляция всех программ, работающих в контексте пользователя, например тех, что находятся в каталогах [.filename]#/bin# и [.filename]#/sbin#, а также исходных текстов ядра. Обновление только части дерева исходных текстов, только ядра или только программ часто приводит к возникновению проблем от ошибок компиляции до аварийных остановов системы или потери данных.
+Если вывод содержит `fatal: not a git repository`, значит, файлы отсутствуют или были установлены другим способом. Необходимо выполнить новое получение исходного кода.
====
-Subversion для обновления исходных текстов использует модель _pull_. Пользователь или сценарий `cron` запускают программу `svn`, которая обновляет локальную версию исходных текстов. Subversion является предпочтительным способом обновления локального дерева исходных текстов, поскольку обновления являются актуальными с точностью до минуты и пользователь управляет временем их загрузки. Загрузку определённых файлов и каталогов легко ограничить, а запрашиваемые обновления формируются на лету на стороне сервера. О том, как актуализировать исходные тексты с использованием Subversion, описано в crossref:mirrors[svn,svn].
+[[updating-src-obtaining-src-repopath]]
+.Версии FreeBSD и ветви репозиториев
+[cols="10%,10%,80%", options="header"]
+|===
+| uname&#160;&#8209;r Output
+| Путь репозитория
+| Описание
-CTM не выполняет интерактивное сравнение имеющихся исходных текстов с находящимися в главном архиве, и не выполняет их загрузку. Вместо этого несколько раз в день на главной машине CTM запускается скрипт, находящий изменения в файлах с момента своего предыдущего запуска. Все обнаруженные изменения сжимаются, помечаются последовательным номером и кодируются для передачи по электронной почте в печатном формате ASCII. После получения эти "дельта-файлы CTM" могут быть переданы утилите `ctm.rmail`, которая осуществляет автоматическое декодирование, проверку и применение изменений к пользовательской копии исходных текстов. Этот процесс более эффективен по сравнению с используемым в Subversion и требует меньше ресурсов сервера, так как он выполнен по модели _push_, а не _pull_. Инструкции по использованию CTM для синхронизации исходных текстов даны в crossref:mirrors[ctm,Использование CTM].
+|`_X.Y_-RELEASE`
+|`releng/_X.Y_`
+|Версия Release с добавлением только критических исправлений безопасности и ошибок. Эта ветка рекомендуется для большинства пользователей.
-Если пользователь случайно уничтожил часть своего архива, Subversion обнаружит и перестроит повреждённую часть. CTM этого не делает, поэтому если пользователь удалил часть дерева исходных текстов и не имеет архивной копии, то нужно будет начать с самого начала (с последнего "базового дельта-файла"), перестроив всё с помощью CTM.
+|`_X.Y_-STABLE`
+|`stable/_X_`
+|
-[[makeworld]]
-== Пересборка мира
+Версия Release и все дополнительные разработки в этой ветке. _STABLE_ означает, что двоичный интерфейс приложений (ABI) не изменяется, поэтому программное обеспечение, скомпилированное для более ранних версий, продолжает работать. Например, программное обеспечение, скомпилированное для работы на FreeBSD 10.1, будет работать и на FreeBSD 10-STABLE, собранной позже.
-После того, как локальное дерево исходных текстов было синхронизировано с некоторой версией FreeBSD (FreeBSD-STABLE или FreeBSD-CURRENT), его можно использовать для перестроения системы. Этот процесс известен как перестроение мира.
+Ветки STABLE иногда содержат ошибки или несовместимости, которые могут повлиять на пользователей, хотя они обычно быстро исправляются.
-_Перед_ перестроением мира убедитесь в выполнении следующих действий:
+|`_X_-CURRENT`
+|`main`
+|Последняя невыпущенная разрабатываемая версия FreeBSD. Ветка CURRENT может содержать серьёзные ошибки или проблемы совместимости и рекомендуется только для опытных пользователей.
+|===
-[.procedure]
-====
-*Procedure: _Перед_ тем как приступать к построению мира*
+Определите версию FreeBSD с помощью man:uname[1]:
-. Сохраните резервную копию всех важных данных на другую систему или съёмный носитель, проверьте её целостность и держите под рукой загрузочный носитель. Невозможно переоценить важность создания резервной копии системы _до_ начала перестроения системы. Хотя перестроение системы является простой задачей, неизбежно возникают ситуации, при которых ошибки в исходных текстах приводят к тому, что система перестаёт загружаться. Возможно, вам никогда не придётся этим воспользоваться, но, постучав по дереву, всегда лучше подстраховаться.
-. Проверьте последние сообщения в списке рассылки {freebsd-stable} или {freebsd-current} (в зависимости от отслеживаемой ветки). Будьте в курсе любых известных проблем, и тех систем, которые они затрагивают. В случае возникновения подобной проблемы, дождитесь сообщения о том, что эта проблема решена. После этого повторите синхронизацию исходных текстов для получения необходимого исправления.
-. Прочтите [.filename]#/usr/src/UPDATING# для получения информации о дополнительных шагах, необходимых для данной версии исходных текстов. В этом файле содержится важная информация о возможных проблемах и может быть указан порядок выполнения соответствующих команд. При большинстве обновлений требуются дополнительные шаги, например, переименование или удаление определённых файлов перед установкой нового мира. Эти шаги будут перечислены в конце файла, где в явном виде описывается текущая рекомендуемая последовательность действий при обновлении. Если содержимое [.filename]#UPDATING# противоречит каким-либо шагам в этой главе, руководствуйтесь инструкциями в файле [.filename]#UPDATING#, которые имеют больший приоритет.
-====
+[source, shell]
+....
+# uname -r
+13.2-RELEASE
+....
-[WARNING]
-.Не используйте `make world`
-====
-В некоторой устаревшей документации рекомендуется использование `make world`. Эта команда пропускает некоторые важные шаги, поэтому использовать её следует лишь в том случае, если вы точно знаете, что делаете. Почти во всех случаях `make world` - это неправильный способ, вместо этого следует использовать описанную здесь процедуру.
-====
+На основе crossref:cutting-edge[updating-src-obtaining-src-repopath,Версии FreeBSD и ветви репозиториев], исходный код для обновления `13.2-RELEASE` имеет путь в репозитории `releng/13.2`. Этот путь используется при проверке исходного кода:
+
+[source, shell]
+....
+# mv /usr/src /usr/src.bak <.>
+# git clone --branch releng/13.2 https://git.FreeBSD.org/src.git /usr/src <.>
+....
-[[canonical-build]]
-=== Обзор процесса
+<.> Переместите старую директорию в другое место. Если в этой директории нет локальных изменений, её можно удалить.
-Процесс построения мира подразумевает переход с более старой версии FreeBSD с использованием исходных текстов более новой версии, которые были получены согласно инструкциям в <<synching>>.
+<.> Путь из crossref:cutting-edge[updating-src-obtaining-src-repopath,Версии FreeBSD и ветви репозитория] добавляется к URL репозитория. Третий параметр — это целевой каталог для исходного кода в локальной системе.
-Во FreeBSD термин "world" обозначает ядро, исполняемые файлы основой системы, библиотеки, файлы для программирования и встроенный компилятор. Имеет значение порядок, при котором эти компоненты собираются и устанавливаются.
+[[updating-src-building]]
+=== Сборка из исходного кода
-Например, из-за ошибки в старом компиляторе невозможно было бы скомпилировать новое ядре. Поскольку новое ядро должно быть собрано новым компилятором, для этого в свою очередь необходимо собрать новый компилятор, но устанавливать его перед сборкой ядра необязательно.
+_Система (world)_ , или вся операционная система, за исключением ядра, компилируется. Это делается в первую очередь, чтобы предоставить актуальные инструменты для сборки ядра. Затем компилируется само ядро:
-Новый мир может зависеть от особенностей нового ядра, поэтому новое ядро должно быть установлено до установки нового мира. Старый мир может работать неправильно на новом ядре, поэтому новый мир должен быть установлен сразу после установки нового ядра.
+[source, shell]
+....
+# cd /usr/src
+# make buildworld
+# make buildkernel
+....
-Перед установкой нового мира могут потребоваться изменения в конфигурации, но некоторые из изменений могут не работать со старым миром. Следовательно, используются два разных этапа обновления конфигурации. В основной части процесса обновления выполняется только замена или добавление файлов. Существующие файлы при этом не удаляются. Поскольку это может повлечь проблемы, в [.filename]#/usr/src/UPDATING# содержится информация о том, какие из файлов и на каком шаге нужно удалить вручную.
+Скомпилированный код записывается в [.filename]#/usr/obj#.
-Исходя из этих соображений в следующей процедуре описана рекомендуемая последовательность обновления.
+Вот основные шаги. Дополнительные параметры для управления сборкой описаны ниже.
-[NOTE]
-====
-Хорошей практикой является запись в файл вывода команды `make`. Если что-то пошло не так, копию сообщения об ошибке можно отправить в один из списков рассылки FreeBSD.
+[[updating-src-building-clean-build]]
+==== Выполнение чистой сборки
-Проще всего использовать для этого `script` с параметром, задающим имя файла для сохранения всего вывода. Не сохраняйте вывод в [.filename]#/tmp#, так как этот каталог может быть очищен при следующей перезагрузке. Более подходящим местом является [.filename]#/var/tmp#. Запустите команду непосредственно перед перестроением мира, а после завершения процесса наберите `exit`:
+Некоторые версии системы сборки FreeBSD оставляют ранее скомпилированный код во временном каталоге объектов [.filename]#/usr/obj#. Это может ускорить последующие сборки, избегая перекомпиляции неизменившегося кода. Для принудительной чистой пересборки всего используйте `cleanworld` перед началом сборки:
-[source,shell]
+[source, shell]
....
-# script /var/tmp/mw.out
-Script started, output file is /var/tmp/mw.out
+# make cleanworld
....
-====
+[[updating-src-building-jobs]]
+==== Установка количества задач
-[.procedure]
-====
-*Procedure: Обзор процесса построения мира*
+Увеличение количества задач сборки на многоядерных процессорах может повысить скорость сборки. Определите количество ядер с помощью `sysctl hw.ncpu`. Процессоры различаются, как и системы сборки, используемые в разных версиях FreeBSD, поэтому тестирование — единственный надежный способ определить, как разное количество задач влияет на скорость сборки. В качестве отправной точки рассмотрите значения от половины до удвоенного количества ядер. Количество задач указывается с помощью `-j`.
-Команды для построения мира должны запускаться в указанном здесь порядке. В этом разделе даётся краткое описание назначения каждой из команд.
+[[updating-src-building-jobs-example]]
+.Увеличение количества заданий сборки
+[example]
+====
+Сборка системы и ядра с использованием четырех задач:
-. Если процесс построения мира уже запускался ранее на этой системе, то в [.filename]#/usr/obj# могла остаться копия предыдущей сборки. Удалите этот каталог для ускорения процесса построения нового мира и возможного сокращений работы по разрешению зависимостей.
-+
-[source,shell]
+[source, shell]
....
-# chflags -R noschg /usr/obj/*
-# rm -rf /usr/obj
+# make -j4 buildworld buildkernel
....
-+
-. Скомпилируйте новый компилятор и несколько сопутствующих инструментов и используйте их для компиляции остальной части мира. Результаты сохраняются в [.filename]#/usr/obj#.
-+
-[source,shell]
+
+====
+
+[[updating-src-building-only-kernel]]
+==== Сборка только ядра
+
+`buildworld` должен быть выполнен, если исходный код изменился. После этого `buildkernel` для сборки ядра может быть запущен в любое время. Чтобы собрать только ядро:
+
+[source, shell]
....
# cd /usr/src
-# make buildworld
-....
-+
-. Для построения нового ядра используйте компилятор, расположенный в [.filename]#/usr/obj#, чтобы защититься от ошибок несоответствия между компилятором и ядром. Это необходимо, так как определённые структуры данных могут поменяться, и при использовании различных версий ядра и исходных текстов перестанут работать `ps` и `top`.
-+
-[source,shell]
-....
# make buildkernel
....
-+
-. Установите новое ядро и модули, чтобы их можно было использовать для загрузки. Если используется `kern.securelevel` со значением выше `1` _и_ на файле ядра установлен `noschg` или подобный флаг, то для этого сперва придётся дополнительно перейти в однопользовательский режим. В противном случае эту команду можно без проблем запустить в многопользовательском режиме. Смотрите страницу Справочника man:init[8] для получения информации о `kern.securelevel`, а также man:chflags[1] для информации об использовании различных файловых флагов.
-+
-[source,shell]
-....
-# make installkernel
-....
-+
-. Переведите систему в однопользовательский режим для минимизации проблем при обновлении уже работающих исполняемых файлов. Это также уменьшит вероятность возникновения проблем при работе старого мира на новом ядре.
-+
-[source,shell]
-....
-# shutdown now
-....
-+
-После перехода в однопользовательский режим, запустите эти команды, если в системе используется UFS:
-+
-[source,shell]
-....
-# mount -u /
-# mount -a -t ufs
-# swapon -a
-....
-+
-Если используется ZFS, запустите другие две команды. В данном примере zpool называется `zroot`:
-+
-[source,shell]
-....
-# zfs set readonly=off zroot
-# zfs mount -a
-....
-+
-. Дополнительно: Если желаемая картография клавиатуры отличается от используемой по умолчанию US English, её можно изменить с помощью man:kbdmap[1]:
-+
-[source,shell]
-....
-# kbdmap
-....
-+
-. Затем, если часы CMOS установлены на местное время (это так, если вывод man:date[1] не содержит правильное время и часовой пояс), выполните:
-+
-[source,shell]
-....
-# adjkerntz -i
-....
-+
-. Пересборка мира не включает в себя добавление или обновление конфигурационных файлов в [.filename]#/etc#, [.filename]#/var#, [.filename]#/usr# и некоторых других каталогах. Следующим шагом является выполнение первоначального обновления файлов конфигурации в [.filename]#/etc# для подготовки к новому миру. Следующая команда ограничивается сравнением файлов, необходимых для успешного выполнения цели `installworld`. В частности, на этом шаге могут быть добавлены новые пользовательские группы, служебные учётные записи и сценарии автозапуска, которые были добавлены во FreeBSD со времени последнего обновления. Это необходимо для их использования при выполнении шага `installworld`. Смотрите <<mergemaster>> для получения более подробных инструкций по этой команде:
-+
-[source,shell]
-....
-# mergemaster -p
-....
-+
-. Установите новый мир и служебные исполняемые файлы, находящиеся в [.filename]#/usr/obj#.
-+
-[source,shell]
-....
-# cd /usr/src
-# make installworld
-....
-+
-. Обновите остальные файлы конфигурации.
-+
-[source,shell]
-....
-# mergemaster -iF
-....
-+
-. Удалите устаревшие файлы. Это важно, так как в противном случае они могут вызвать проблемы.
-+
-[source,shell]
-....
-# make delete-old
-....
-+
-. Теперь нужна полная перезагрузка системы для того, чтобы загрузить новое ядро и мир с использованием новых конфигурационных файлов.
-+
-[source,shell]
-....
-# reboot
-....
-+
-. Убедитесь, что перед удалением старых версий библиотек все установленные порты были пересобраны согласно инструкциям в crossref:ports[ports-upgrading,Обновление портов]. По завершению удалите все старые библиотеки во избежание конфликтов с их новыми версиями. За подробным описанием этого шага обратитесь к <<make-delete-old>>.
-+
-[source,shell]
-....
-# make delete-old-libs
-....
-====
-
-Если для системы доступно окно обслуживания, обдумайте возможность компиляции системы в однопользовательском режиме вместо использования для этого многопользовательского режима с переводом в однопользовательский режим для установки. Переустановка системы затрагивает множество важных системных файлов, все стандартные системные исполняемые файлы, библиотеки и заголовочные файлы. Замена этих файлов на работающей системе (в частности, используемых в данный момент пользователями) может привести к неприятностям.
-[[src-updating]]
-=== Файлы конфигурации
+[[updating-src-building-custom-kernel]]
+==== Сборка собственного ядра
-В процессе построения мира используется несколько файлов конфигурации.
+Стандартное ядро FreeBSD основано на _конфигурационном файле ядра_ [.filename]#GENERIC#. Ядро [.filename]#GENERIC# включает наиболее часто востребованные драйверы устройств и параметры. Иногда полезно или необходимо собрать собственное ядро, добавляя или удаляя драйверы устройств и параметры для соответствия конкретным требованиям.
-[.filename]#Makefile#, расположенный в [.filename]#/usr/src#, описывает правила и порядок построения программ, составляющих FreeBSD.
+Например, разработчик компактного встраиваемого компьютера с крайне ограниченным объёмом оперативной памяти может удалить ненужные драйверы устройств или опции, чтобы немного уменьшить размер ядра.
-В man:make.conf[5] описаны параметры, доступные для `make`, а также несколько общих примеров имеется в [.filename]#/usr/shared/examples/etc/make.conf#. Добавляемые в [.filename]#/etc/make.conf# параметры определяют поведение `make` при построении программ. Эти параметры действуют при каждом использовании `make`, включая компиляцию приложений из Коллекции Портов, компиляцию собственных программ на Си и построение операционной системы FreeBSD. Изменение некоторых настроек может иметь далекоидущие и порой неожиданные последствия. Прочтите комментарии в обоих местах и примите к сведению, что значения по умолчанию были выбраны как компромисс между производительностью и надёжностью.
+Файлы конфигурации ядра находятся в [.filename]#/usr/src/sys/arch/conf/#, где _arch_ — это результат выполнения команды `uname -m`. На большинстве компьютеров это `amd64`, что соответствует каталогу с конфигурационными файлами [.filename]#/usr/src/sys/amd64/conf/#.
-Поведение при сборке операционной системы из исходных текстов задаётся в [.filename]#/etc/src.conf#. В отличие от [.filename]#/etc/make.conf#, содержимое [.filename]#/etc/src.conf# влияет только на сборку самой операционной системы FreeBSD. Описание многих параметров, доступных в этом файле, имеется в man:src.conf[5]. Будьте осторожны при выключении на первый взгляд ненужных модулей ядра или параметров сборки. Иногда между ними имеются неожиданные или неочевидные взаимозависимости.
-
-[[make-buildworld]]
-=== Переменные и цели выполнения
+[TIP]
+====
+[.filename]#/usr/src# можно удалить или создать заново, поэтому предпочтительнее хранить конфигурационные файлы собственного ядра в отдельном каталоге, например, в [.filename]#/root#. Свяжите конфигурационный файл ядра с каталогом [.filename]#conf#. Если этот каталог будет удалён или перезаписан, конфигурацию ядра можно снова связать с новым каталогом.
+====
-Общий формат использования `make`:
+Собственный конфигурационный файл можно создать, скопировав файл [.filename]#GENERIC#. В этом примере новое собственное ядро предназначено для сервера хранения данных, поэтому он назван [.filename]#STORAGESERVER#:
-[source,shell]
+[source, shell]
....
-# make -x -DVARIABLE target
+# cp /usr/src/sys/amd64/conf/GENERIC /root/STORAGESERVER
+# cd /usr/src/sys/amd64/conf
+# ln -s /root/STORAGESERVER .
....
-В этом примере параметр `-_x_` передаётся `make`. Обратитесь к странице Справочника man:make[1] для получения примеров использования имеющихся параметров.
+Затем отредактируйте файл [.filename]#/root/STORAGESERVER#, добавляя или удаляя устройства или параметры, как показано в man:config[5].
-Чтобы передать переменную, укажите её имя с использованием `-D_VARIABLE_`. Поведение [.filename]#Makefile# зависит от переменных. Они могут быть заданы в [.filename]#/etc/make.conf# или указаны при использовании `make`. Например, эта переменная указывает, что библиотеки для профилирования собирать не нужно:
+Собственное ядро собирается путем установки `KERNCONF` в файл конфигурации ядра в командной строке:
-[source,shell]
+[source, shell]
....
-# make -DNO_PROFILE target
+# make buildkernel KERNCONF=STORAGESERVER
....
-Это соответствует настройке в [.filename]#/etc/make.conf#:
+[[updating-src-installing]]
+=== Установка скомпилированного кода
-[.programlisting]
+После завершения шагов `buildworld` и `buildkernel` новые ядро и система устанавливаются:
+
+[source, shell]
....
-NO_PROFILE= true # Обход построения библиотек для профилирования
+# cd /usr/src
+# make installkernel
+# shutdown -r now
+# cd /usr/src
+# make installworld
+# shutdown -r now
....
-_target_ указывает программе `make` на то, что нужно сделать, а [.filename]#Makefile# определяет доступные цели. Некоторые цели используются в процессе построения для разбиения его на этапы.
-
-Разделение опций удобно по двум причинам. Во-первых, это позволяет выполнять сборку, не затрагивая компоненты рабочей системы. По этой причине можно спокойно запустить `buildworld` на машине, работающей в многопользовательском режиме. Но цель `installworld` всё же рекомендуется запускать в однопользовательском режиме.
+Если было собрано собственное ядро, `KERNCONF` также должен быть установлен для использования нового собственного ядра:
-Во-вторых, это позволяет использовать монтирование по NFS для обновления многих машин по сети согласно описанию в <<small-lan>>.
+[source, shell]
+....
+# cd /usr/src
+# make installkernel KERNCONF=STORAGESERVER
+# shutdown -r now
+# cd /usr/src
+# make installworld
+# shutdown -r now
+....
-Параметр `-j` приводит к запуску нескольких одновременно работающих процессов `make`. Поскольку процесс компиляции больше всего требователен к подсистеме ввода/вывода, а не к производительности процессора, это можно использовать и на машинах с одним процессором.
+[[updating-src-completing]]
+=== Завершение обновления
-Используйте следующую команду на машине с одним CPU, чтобы иметь до 4 одновременно работающих процессов. Опубликованные в списке рассылки практические замеры показывают, что в среднем это даёт наибольший выигрыш в производительности.
+Для окончания обновления выполняется несколько завершающих задач. Изменённые конфигурационные файлы объединяются с новыми версиями, устаревшие библиотеки находятся и удаляются, после чего система перезагружается.
-[source,shell]
-....
-# make -j4 buildworld
-....
+[[updating-src-completing-merge-etcupdate]]
+==== Объединение конфигурационных файлов с помощью man:etcupdate[8]
-На многопроцессорной машине попробуйте подобрать значение между `6` и `10`, и посмотрите, как это отразится на скорости работы.
+man:etcupdate[8] — это инструмент для управления обновлениями файлов, которые не обновляются в процессе выполнения `installworld`, таких как файлы в [.filename]#/etc/#. Он управляет обновлениями, выполняя трёхстороннее слияние изменений, внесённых в эти файлы, с локальными версиями. man:etcupdate[8] разработан для минимизации вмешательства пользователя.
[NOTE]
====
-Если при выполнении команды `make buildworld` были заданы значения каких-либо переменных, то при выполнении `make installworld` нужно задать те же самые переменные. При этом `-j` _нельзя_ использовать совместно с `installworld`.
-
-Например, если выполнялась эта команда:
+В общем, man:etcupdate[8] не требует специальных аргументов для своей работы. Однако есть удобная промежуточная команда для проверки того, что будет сделано при первом использовании man:etcupdate[8]:
-[source,shell]
+[source, shell]
....
-# make -DNO_PROFILE buildworld
+# etcupdate diff
....
-то результат её выполнения должен устанавливаться командой:
+Эта команда позволяет пользователю отслеживать изменения конфигурации.
+====
+
+Если man:etcupdate[8] не может автоматически объединить файл, конфликты слияния можно разрешить вручную, выполнив:
-[source,shell]
+[source, shell]
....
-# make -DNO_PROFILE installworld
+# etcupdate resolve
....
-В противном случае вторая команда попытается установить библиотеки для профилирования, которые не компилировались на этапе выполнения команды `make buildworld`.
+[WARNING]
====
+При переходе с man:mergemaster[8] на man:etcupdate[8] первый запуск может некорректно объединить изменения, создавая ложные конфликты. Чтобы избежать этого, выполните следующие действия *перед* обновлением исходных кодов и сборкой нового мира:
-[[mergemaster]]
-=== Объединение файлов конфигурации
-
-FreeBSD предоставляет утилиту man:mergemaster[8], которая является скриптом для оболочки Боурна и предназначена для определения разницы между конфигурационными файлами в каталоге [.filename]#/etc# и конфигурационными файлами из дерева исходных текстов [.filename]#/usr/src/etc#. Это является рекомендуемым способом синхронизации системных конфигурационных файлов с теми, что размещены в дереве исходных текстов.
-
-Перед использованием `mergemaster` рекомендуется скопировать имеющийся каталог [.filename]#/etc# в какое-нибудь безопасное место. `-R` задает выполнение рекурсивного копирования, а `-p` сохраняет даты и владельца файлов:
-
-[source,shell]
+[source, shell]
....
-# cp -Rp /etc /etc.old
+# etcupdate extract <.>
+# etcupdate diff <.>
....
-При запуске `mergemaster` строит временное корневое окружение, начиная с [.filename]#/#, и заполняет его различными системными конфигурационными файлами. Затем эти файлы сравниваются с текущими установленными в системе. Файлы, которые имеют отличия, будут выданы в формате man:diff[1], где знак `+` означает добавленные или изменённые строки, а знак `-` означает строки, которые будут либо полностью удалены, либо заменены на новый файл. Обратитесь к страницам справочной системы по команде man:diff[1] для получения более полной информации о формате выдачи отличий в файлах.
-
-Затем `mergemaster` выдаст каждый файл, в котором есть изменения, с вариантами действий: удалить новый файл, упоминаемый здесь как временный, установить временный файл в его неизменённом виде, объединить временный файл с установленным на данный момент, либо просмотреть результат ещё раз.
-
-Выбор удаления временного файла укажет `mergemaster` оставить текущий файл без изменений и удалить его новую версию. Делать это не рекомендуется. Чтобы получить помощь в любое время, наберите kbd:[?] в приглашении `mergemaster`. Если пользователь выбирает пропуск файла, запрос появится снова, после того как будут обработаны все остальные файлы.
-
-Выбор установки немодифицированного временного файла приведёт к замене текущего файла новым. Для большинства немодифицированных файлов это является подходящим вариантом.
-
-Выбор варианта с объединением файла приведёт к вызову текстового редактора, содержащего текст обоих файлов. Файлы можно объединить, просматривая оба файла на экране и выбирая те части из обоих, которые подходят для окончательного варианта. При сравнении файлов нажатие kbd:[l] выбирает содержимое слева, нажатие kbd:[r] выбирает содержимое справа. В окончательном варианте будет файл, состоящий из обеих частей, который и будет установлен. Этот вариант обычно используется для файлов, настройки в которых изменялись пользователем.
-
-Выбор повторного просмотра результатов выдаст разницу между файлами.
-
-После того как утилита `mergemaster` закончит работу с системными файлами, она выдаст запрос относительно других параметров. Она может запросить перестроение файла паролей и завершится запросом на удаление оставшихся временных файлов.
+<.> Загрузите базы данных стандартных файлов [.filename]#/etc#; дополнительную информацию смотрите в man:etcupdate[8].
-[[make-delete-old]]
-=== Удаление устаревших файлов и библиотек
+<.> Проверьте изменения после начальной настройки. Удалите все локальные изменения, которые больше не нужны, чтобы уменьшить вероятность конфликтов при будущих обновлениях.
+====
-В ходе жизненного цикла разработки FreeBSD файлы с их содержимым иногда становятся устаревшими. Это может быть вызвано тем, что функциональность реализуется в другом месте, сменился номер версии библиотеки или файл был целиком удалён из системы. Такие устаревшие файлы, библиотеки и каталоги следует удалять вместе с обновлением системы. Это не даст захламить систему старыми файлами, которые занимают место на диске и на архивных носителях. Кроме того, если в старой библиотеке имеется проблема безопасности или стабильности, такую систему следует обновить до более новой библиотеки, чтобы предотвратить крахи, вызванные работой старой версии. Файлы, каталоги и библиотеки, которые признаны устаревшими, перечислены в [.filename]#/usr/src/ObsoleteFiles.inc#. Для удаления устаревших файлов в процессе обновления системы следует пользоваться следующими инструкциями.
+[[updating-src-completing-check-old]]
+==== Проверка устаревших файлов и библиотек
-После выполнения `make installworld` и последующего `mergemaster` проверьте наличие устаревших файлов и библиотек:
+Некоторые устаревшие файлы или каталоги могут остаться после обновления. Эти файлы могут быть найдены:
-[source,shell]
+[source, shell]
....
-# cd /usr/src
# make check-old
....
-Если были найдены какие-либо устаревшие файлы, их можно удалить с помощью следующей команды:
+и удалены:
-[source,shell]
+[source, shell]
....
# make delete-old
....
-Перед удалением каждого устаревшего файла запрашивается подтверждение. Используйте `BATCH_DELETE_OLD_FILES`, чтобы сократить этот процесс и позволить системе удалить эти файлы автоматически:
+Некоторые устаревшие библиотеки также могут остаться. Их можно обнаружить с помощью:
-[source,shell]
+[source, shell]
....
-# make -DBATCH_DELETE_OLD_FILES delete-old
+# make check-old-libs
....
-Аналогичного эффекта можно достичь, пропустив эти команды через `yes`:
+и удалить
-[source,shell]
+[source, shell]
....
-# yes|make delete-old
+# make delete-old-libs
....
-.Предупреждение
-[WARNING]
+Программы, которые всё ещё использовали эти старые библиотеки, перестанут работать после удаления библиотек. Эти программы необходимо пересобрать или заменить после удаления старых библиотек.
+
+[TIP]
====
+Когда известно, что все старые файлы или каталоги можно безопасно удалить, нажатие kbd:[y] и kbd:[Enter] для подтверждения удаления каждого файла можно избежать, установив параметр `BATCH_DELETE_OLD_FILES` в команде. Например:
+
+[source, shell]
+....
+# make BATCH_DELETE_OLD_FILES=yes delete-old-libs
+....
-Удаление устаревших файлов приведёт к нарушению работы программ, которые всё ещё зависят от этих устаревших файлов. Это особенно верно для старых библиотек. В большинстве случаев программы, порты или библиотеки, использующие такую старую библиотеку, нужно перекомпилировать перед выполнением `make delete-old-libs`.
====
-Программы для проверки наличия зависимостей от совместно используемых библиотек включают в себя package:sysutils/libchk[] и package:sysutils/bsdadminscripts[].
+[[updating-src-completing-restart]]
+==== Перезагрузка после обновления
-Устаревшие совместно используемые библиотеки могут конфликтовать с более новыми библиотеками, что приводит к сообщениям следующего вида:
+Последним шагом после обновления является перезагрузка компьютера, чтобы все изменения вступили в силу:
-[source,shell]
+[source, shell]
....
-/usr/bin/ld: warning: libz.so.4, needed by /usr/local/lib/libtiff.so, may conflict with libz.so.5
-/usr/bin/ld: warning: librpcsvc.so.4, needed by /usr/local/lib/libXext.so, may conflict with librpcsvc.so.5
+# shutdown -r now
....
-Для решения этих проблем выясните, какой именно порт установил данную библиотеку:
+[[small-lan]]
+== Распространение обновлений на несколько машин
-[source,shell]
-....
-# pkg which /usr/local/lib/libtiff.so
- /usr/local/lib/libtiff.so was installed by package tiff-3.9.4
-# pkg which /usr/local/lib/libXext.so
- /usr/local/lib/libXext.so was installed by package libXext-1.1.1,1
-....
+Когда несколько машин должны отслеживать одно и то же дерево исходных кодов, это приводит к расточительному использованию дискового пространства, пропускной способности сети и процессорного времени, если каждая система загружает исходные коды и пересобирает всё самостоятельно. Решение заключается в том, чтобы одна машина выполняла основную часть работы, а остальные монтировали результаты через NFS. В этом разделе описывается метод организации такого процесса. Дополнительные сведения об использовании NFS см. в crossref:network-servers[network-nfs,"Network File System (NFS)"].
-Затем данный порт нужно удалить, пересобрать и переустановить. Для автоматизации этого процесса можно использовать package:ports-mgmt/portmaster[]. После того как все порты пересобраны и более не используют старые библиотеки, удалите эти старые библиотеки с помощью следующей команды:
+Сначала определите набор машин, которые будут запускать один и тот же набор бинарных файлов, известный как _набор сборки_. На каждой машине может быть своё собственное ядро, но пользовательские бинарные файлы должны быть одинаковыми. Из этого набора выберите машину, которая будет _машиной для сборки_, на которой будут собираться система и ядро. В идеале это должна быть производительная машина с достаточным количеством свободных ресурсов CPU для выполнения команд `make buildworld` и `make buildkernel`.
-[source,shell]
-....
-# make delete-old-libs
-....
+Выберите машину, которая будет _тестовой машиной_ для проверки обновлений программного обеспечения перед их внедрением в производство. Это _должна_ быть машина, которая может позволить себе длительный простой. Она может быть той же машиной, что и сборщик, но это не обязательно.
-Если что-то работает неправильно, можно с лёгкостью перестроить конкретную часть системы. Например, если файл [.filename]#/etc/magic# был случайно удалён в процессе обновления или переноса [.filename]#/etc#, то команда `file` перестанет работать. В таком случае это можно исправить вот так:
+Все машины в этом наборе сборки должны монтировать [.filename]#/usr/obj# и [.filename]#/usr/src# сборочной машины через NFS. Для нескольких наборов сборки [.filename]#/usr/src# должен находиться на одной сборочной машине и монтироваться по NFS на остальных.
-[source,shell]
-....
-# cd /usr/src/usr.bin/file
-# make all install
-....
+Убедитесь, что файлы [.filename]#/etc/make.conf# и [.filename]#/etc/src.conf# на всех машинах в наборе сборки соответствуют таковым на машине сборки. Это означает, что машина сборки должна собирать все части базовой системы, которые будут устанавливаться на любой машине из набора сборки. Кроме того, каждая машина сборки должна иметь имя ядра, указанное с помощью `KERNCONF` в [.filename]#/etc/make.conf#, а машина сборки должна перечислить их все в своем `KERNCONF`, указав собственное ядро первым. Машина сборки должна иметь конфигурационные файлы ядра для каждой машины в своем каталоге [.filename]#/usr/src/sys/arch/conf#.
-[[updating-questions]]
-=== Вопросы общего характера
+На машине для сборки соберите ядро и систему, как описано в crossref:cutting-edge[makeworld,Обновление FreeBSD из исходного кода], но не устанавливайте ничего на машину для сборки. Вместо этого установите собранное ядро на тестовую машину. На тестовой машине смонтируйте [.filename]#/usr/src# и [.filename]#/usr/obj# через NFS. Затем выполните `shutdown now`, чтобы перейти в однопользовательский режим для установки нового ядра и системы, а также запустите `etcupdate` как обычно. По завершении перезагрузитесь, чтобы вернуться к обычной многопользовательской работе.
-Нужно ли полностью перестраивать систему при каждом изменении?::
-Это зависит от характера изменения. Например, если svn показывает, что с момента последнего запуска были изменены только следующие файлы:
-+
-[source,shell]
-....
-src/games/cribbage/instr.c
-src/games/sail/pl_main.c
-src/release/sysinstall/config.c
-src/release/sysinstall/media.c
-src/shared/mk/bsd.port.mk
-....
-+
-то перестраивать всю систему возможно незачем. Вместо этого можно перейти в соответствующие подкаталоги и выдать команду `make all install`. Однако если меняется что-то важное, например, [.filename]#src/lib/libc/stdlib#, то вы должны перестроить всю систему.
-+
-Некоторые пользователи перестраивают систему каждые две недели, позволяя изменениям накопиться за это время. Другие перестраивают только те вещи, которые менялись, и внимательно отслеживают все зависимости. Всё это зависит от того, как часто пользователь хочет делать обновление и отслеживает ли он FreeBSD-STABLE или FreeBSD-CURRENT.
+После проверки того, что все на тестовой машине работает правильно, используйте ту же процедуру для установки нового программного обеспечения на каждой из остальных машин в наборе сборки.
-Почему прерывается компиляция с большим количеством ошибок по сигналу 11 (или с другим номером сигнала)?::
-Как правило, это говорит о проблемах с оборудованием. Построение системы является эффективным стресс-тестом для оборудования, в особенности памяти. Явным указателем на это является то, что при перезапуске make процедура построения прекращается в различные моменты времени.
-+
-Для исправления этой ошибки попробуйте заменить комплектующие машины, начиная с оперативной памяти, для определения сбоящей компоненты.
+Тот же метод можно применить к дереву портов. Первый шаг — предоставить общий доступ через NFS к [.filename]#/usr/ports# для всех машин в наборе сборки. Чтобы настроить [.filename]#/etc/make.conf# для совместного использования distfiles, установите `DISTDIR` в общий каталог, доступный для записи пользователем, в которого отображается `root` при монтировании NFS. Каждая машина должна установить `WRKDIRPREFIX` в локальный каталог сборки, если порты собираются локально. В качестве альтернативы, если система сборки предназначена для создания и распространения пакетов на машины в наборе сборки, установите `PACKAGES` в системе сборки в каталог, аналогичный `DISTDIR`.
-Можно ли удалить [.filename]#/usr/obj# после окончания?::
-В этом каталоге содержатся все объектные файлы, которые создаются во время фазы компиляции. Обычно одним из первых шагов в процессе `make buildworld` является удаление этого каталога, чтобы начать заново. Сохранение [.filename]#/usr/obj# после окончания имеет мало смысла, а его удаление освободит приблизительно 2 ГБ дискового пространства.
+[[building-on-non-freebsd-hosts]]
+== Сборка на хостах, отличных от FreeBSD
-Могут ли быть продолжены прерванные процессы построения?::
-Это зависит от того, насколько далеко зашел процесс построения перед тем, как была обнаружена проблема. В общем случае процесс `make buildworld` строит новые копии необходимых инструментальных средств и системные библиотеки. Затем эти средства и библиотеки устанавливаются. Новые инструментальные средства и библиотеки затем используются для перестроения самих себя и повторно устанавливаются. Система в целом теперь перестраивается с новыми системными файлами.
-+
-На последней стадии выполнение этих команд является достаточно безопасным, поскольку они не отменяют работу предыдущего `make buildworld`:
-+
-[source,shell]
-....
-# cd /usr/src
-# make -DNO_CLEAN all
-....
-+
-Если в выводе `make buildworld` появляется такое сообщение:
-+
-[source,shell]
-....
---------------------------------------------------------------
-Building everything..
---------------------------------------------------------------
-....
-+
-то делать так вероятно достаточно безопасно.
-+
-Если такое сообщение не выводится, всегда лучше подстраховаться и запустить сборку с самого начала.
+Исторически для сборки требовался хост с FreeBSD. В настоящее время FreeBSD можно собирать на Linux и macOS.
-Можно ли ускорить сборку мира?::
-Ускорить процесс сборки мира может несколько действий. Например, весь процесс можно выполнять в однопользовательском режиме. Однако, это не позволит пользователям иметь доступ к системе, пока этот процесс не завершится.
-+
-Тщательный подход к проектированию файловой системы или использование датасетов ZFS позволит почувствовать разницу. Задумайтесь о размещении [.filename]#/usr/src# и [.filename]#/usr/obj# на различных файловых системах. По возможности размещайте файловые системы на различных дисках и дисковых контроллерах. При монтировании [.filename]#/usr/src# используйте параметр `noatime`, который отключает запись информации о времени доступа к файлу. Если [.filename]#/usr/src# не расположен на собственной файловой системе, подумайте о перемонтировании [.filename]#/usr# с `noatime`.
-+
-Файловая система, на которой располагается [.filename]#/usr/obj#, может быть смонтирована (или перемонтирована) с параметром `async`. Это приведёт к тому, что операции записи на диск будут выполняться асинхронно. Другими словами, запись будет завершаться немедленно, но данные записываться на диск несколькими секундами позже. Это позволит объединять операции записи и приведёт к значительному приросту производительности.
-+
-Файловую систему с [.filename]#/usr/obj# можно смонтировать с `async` для записи на диск в асинхронном режиме. В этом случае операции записи завершаются мгновенно, а сами данные записываются на диск через несколько секунд. Это позволяет писать кластеризованно, что может дать значительный прирост производительности.
-+
-[WARNING]
+Для сборки на хосте, отличном от FreeBSD, рекомендуется использовать скрипт `tools/build/make.py`. Этот скрипт служит обёрткой для `bmake` — реализации make, используемой в FreeBSD. Он обеспечивает загрузку необходимых инструментов, включая man:make[1] из FreeBSD, и правильную настройку среды сборки. В частности, он устанавливает переменные внешнего инструментария, такие как `XCC`, `XLD` и другие. Кроме того, скрипт может передавать дополнительные аргументы командной строки, например `-j 4` для параллельной сборки или конкретные цели make, в `bmake`.
+
+[NOTE]
+====
+Вместо скрипта `tools/build/make.py` также можно использовать свежую версию `bmake`. Однако в этом случае необходимые переменные окружения нужно задавать вручную (проще всего получить их список, выполнив `tools/build/make.py --debug`).
====
-Имейте в виду, что эта опция делает вашу файловую систему менее устойчивой. С этой опцией имеется больше шансов, что при перезагрузке машины после неожиданного сбоя при пропадании напряжения файловая система окажется в невосстановимом состоянии.
+В противном случае список требований для сборки FreeBSD довольно короткий. Фактически, он сводится к установке нескольких зависимостей.
-Если каталог [.filename]#/usr/obj# - это всё, что есть на этой файловой системе, то это не проблема. Если на той же самой файловой системе имеются какие-то важные данные, то проверьте давность ваших резервных копий перед включением этой опции.
-====
-+
-Выключите генерацию профилирующего кода, установив "NO_PROFILE=true" в файле [.filename]#/etc/make.conf#.
-+
-Передайте утилите man:make[1] параметр `-j__n__` для запуска параллельно нескольких процессов. Обычно это помогает вне зависимости от того, сколько процессоров установлено в машине.
+На macOS единственная зависимость — LLVM. Необходимые зависимости можно установить с помощью менеджера пакетов (например, link:https://brew.sh/[Homebrew]):
-Что делать, если что-то пошло не так?::
-Скрупулезно проверьте, чтобы в вашем окружении не было мешающих остатков от предыдущих построений:
-+
-[source,shell]
+[source, shell]
....
-# chflags -R noschg /usr/obj/usr
-# rm -rf /usr/obj/usr
-# cd /usr/src
-# make cleandir
-# make cleandir
+brew install llvm
....
-+
-Да, команду `make cleandir` действительно нужно выполнять дважды.
-+
-После этого повторите весь процесс снова, начиная с `make buildworld`.
-+
-Если у вас всё ещё есть проблемы, пришлите текст ошибки и вывод команды `uname -a` в {freebsd-questions}. Будьте готовы ответить на другие вопросы о конфигурации вашей системы!
-
-[[small-lan]]
-== Отслеживание исходных текстов для нескольких машин
-Если нужно отслеживать одно и то же дерево исходных текстов на множестве машин, то загрузка кода и полное перестроение системы на каждой из них выглядит как ненужная трата ресурсов: дискового пространства, пропускной способности сети и процессорного времени. Решением является выделение одной машины, которая выполняет основной объём работы, в то время как остальные используют результаты работы посредством NFS. В этом разделе описывается именно этот метод. Для получения информации об использовании NFS обращайтесь в crossref:network-servers[network-nfs,Network File System (NFS)].
+На дистрибутивах Linux установите link:https://clang.llvm.org/[Clang] версии 10.0 или новее, а также заголовочные файлы для libarchive и libbz2 (обычно поставляются в пакетах libarchive-dev и libbz2-dev).
-Первым делом определите набор машин, на которых будет выполняться единый набор программ, который мы будем называть _набором для построения_. Каждая машина может иметь собственное уникальное ядро, но они будут работать с одними и теми же программами пользователя. Из этого набора выберите машину, которая будет являться _машиной построения_, на которой будут строиться ядро и всё окружение. В идеальном случае это быстрая машина с достаточно незагруженным CPU для выполнения команд `make buildworld` и `make buildkernel`.
+После установки зависимостей система должна быть способна собрать FreeBSD.
-Выберите _тестовую машину_, которая будет выполнять проверку обновлений программного обеспечения, прежде чем они пойдут в работу. Это _должна_ быть машина, которая может находиться в нерабочем состоянии достаточно долго. Это также может быть машина построения, но не обязательно.
+Например, следующая команда `tools/build/make.py` собирает систему (world):
-Всем машинам в этом наборе для построения нужно смонтировать [.filename]#/usr/obj# и [.filename]#/usr/src# по NFS с машины построения. В случае нескольких наборов для построения каталог [.filename]#/usr/src# должен находиться на одной машине построения и монтироваться на остальных по NFS.
-
-Удостоверьтесь, что [.filename]#/etc/make.conf# и [.filename]#/etc/src.conf# на всех машинах в заданном наборе для построения согласуются с машиной построения. Это означает, что машина построения должна строить все те части базовой системы, которые будут устанавливаться на каждой машине из набора для построения. Кроме того, у каждой машины построения должно быть задано имя ядра в переменной `KERNCONF` в [.filename]#/etc/make.conf#, и машина построения должна перечислить их все в переменной `KERNCONF`, причём первым должно идти имя её собственного ядра. Машина построения должна хранить конфигурационные файлы ядра каждой машины в каталоге [.filename]#/usr/src/sys/arch/conf#.
-
-Постройте ядро и всё окружение на машине построения так, как это описано в <<make-buildworld>>, но ничего не устанавливайте на самой машине. Вместо этого, установите собранное ядро на тестовой машине. Для этого смонтируйте [.filename]#/usr/src# и [.filename]#/usr/obj# по NFS. Затем выполните команду `shutdown now` для перехода в однопользовательский режим, для того чтобы установить новое ядро и всё окружение, после чего выполните команду `mergemaster` обычным образом. После этих действий перезагрузитесь для возврата к обычному режиму работы в многопользовательском режиме.
+[source, shell]
+....
+MAKEOBJDIRPREFIX=/tmp/obj tools/build/make.py -j 8 TARGET=arm64 TARGET_ARCH=aarch64 buildworld
+....
-После того, как вы убедитесь в нормальной работе всего на тестовой машине, проведите эту процедуру для установки нового программного обеспечения на каждой из оставшихся машин в наборе для построения.
+Он собирает систему для целевой архитектуры `aarch64:arm64` на 8 CPU и использует [.filename]#/tmp/obj# для объектных файлов. Обратите внимание, что переменные `MAKEOBJDIRPREFIX`, `TARGET` и `TARGET_ARCH` обязательны при сборке на хостах, отличных от FreeBSD. Также убедитесь, что создан каталог для объектных файлов, указанный в переменной окружения `MAKEOBJDIRPREFIX`.
-Такой же подход можно использовать и для дерева портов. Сперва нужно смонтировать [.filename]#/usr/ports# по NFS на всех машинах в наборе для построения. Чтобы настроить [.filename]#/etc/make.conf# для использования общего каталога с дистрибутивными файлами, задайте переменную `DISTDIR` так, чтобы она указывала на общедоступный каталог, доступный для записи тому пользователю, который отображается в пользователя `root` для точек монтирования NFS. Каждая машина должна задавать `WRKDIRPREFIX` так, чтобы она указывала на локальный каталог, если порты будут собираться локально. Если же пакеты будут распространяться, задайте на машине построения переменную `PACKAGES`, чтобы она указывала на каталог, соответствующий `DISTDIR`.
+Обратитесь к man:arch[7] и man:build[7] для получения дополнительной информации.