diff options
Diffstat (limited to 'documentation/content/ru/articles/freebsd-releng/_index.adoc')
| -rw-r--r-- | documentation/content/ru/articles/freebsd-releng/_index.adoc | 952 |
1 files changed, 952 insertions, 0 deletions
diff --git a/documentation/content/ru/articles/freebsd-releng/_index.adoc b/documentation/content/ru/articles/freebsd-releng/_index.adoc new file mode 100644 index 0000000000..d02aebc780 --- /dev/null +++ b/documentation/content/ru/articles/freebsd-releng/_index.adoc @@ -0,0 +1,952 @@ +--- +authors: + - + author: 'Glen Barber' + email: gjb@FreeBSD.org +description: 'Описывает подход, используемый командой разработки релизов FreeBSD для создания релизов операционной системы FreeBSD производственного качества. В нем описаны инструменты, доступные тем, кто заинтересован в создании настраиваемых релизов FreeBSD для корпоративного внедрения или коммерческой продуктивизации' +organizations: + - + organization: 'The FreeBSD Foundation' + webpage: https://www.freebsdfoundation.org/ + - + organization: 'Rubicon Communications, LLC (Netgate)' + webpage: https://www.netgate.com/ +tags: ["releases", "engineering", "process", "FreeBSD"] +title: 'Подготовка релизов FreeBSD' +trademarks: ["freebsd", "intel", "general", "git"] +--- + += Подготовка релизов FreeBSD +:doctype: article +:toc: macro +:toclevels: 1 +:icons: font +:sectnums: +:sectnumlevels: 6 +:source-highlighter: rouge +:experimental: +:teamBugmeister: FreeBSD Bugmeister Team +:teamDoceng: FreeBSD Documentation Engineering Team +:teamPortmgr: FreeBSD Ports Management Team +:teamPostmaster: FreeBSD Postmaster Team +:teamRe: FreeBSD Release Engineering Team +:teamSecteam: FreeBSD Security Team +:branchHead: main +:branchStable: stable/ +:branchStablex: stable/13 +:branchReleng: releng/ +:branchRelengx: releng/13.0 +:tagReleasex: release/13.0.0 +:branchRevision: 13.0 + +:images-path: articles/freebsd-releng/ + +ifdef::env-beastie[] +ifdef::backend-html5[] +include::shared/authors.adoc[] +include::shared/mirrors.adoc[] +include::shared/releases.adoc[] +include::shared/attributes/attributes-{{% lang %}}.adoc[] +include::shared/{{% lang %}}/teams.adoc[] +include::shared/{{% lang %}}/mailing-lists.adoc[] +include::shared/{{% lang %}}/urls.adoc[] +:imagesdir: ../../../images/{images-path} +endif::[] +ifdef::backend-pdf,backend-epub3[] +include::../../../../shared/asciidoctor.adoc[] +endif::[] +endif::[] + +ifndef::env-beastie[] +include::../../../../../shared/asciidoctor.adoc[] +endif::[] + +[.abstract-title] +Аннотация + +В этой статье описывается процесс разработки релизов проекта FreeBSD. + +''' + +toc::[] + +[[introduction]] +== Введение в процесс разработки релизов FreeBSD + +Разработка FreeBSD следует очень специфичному рабочему процессу. В общем +случае все изменения в базовой системе FreeBSD вносятся в ветку +{branchHead}, которая отражает вершину дерева исходного кода. + +После достаточного периода тестирования изменения могут быть объединены в +ветки {branchStable}. Минимальный срок по умолчанию перед объединением в +ветки {branchStable} составляет три (3) дня. + +Хотя общее правило предписывает выждать минимум три дня перед слиянием из +{branchHead}, существуют особые обстоятельства, при которых может +потребоваться немедленное слияние, например, критическое исправление +безопасности или исправление ошибки, напрямую блокирующей процесс сборки +выпуска. + +Через несколько месяцев, когда количество изменений в ветке {branchStable} +значительно увеличилось, наступает время выпуска следующей версии +FreeBSD. Исторически такие выпуски называются релизами "с точкой". + +Между выпусками из ветвей {branchStable}, примерно каждые два (2) года, +выпуск будет создаваться напрямую из {branchHead}. Исторически такие выпуски +назывались выпуском «точка-ноль (dot-zero)». + +Эта статья освещает рабочий процесс и обязанности команды {teamRe} как для +выпуска "точка-ноль", так и для "промежуточных" выпусков. + +Следующие разделы этой статьи описывают: + +crossref:freebsd-releng[releng-prep, Общая информация и подготовка]:: +Общая информация и подготовка перед началом цикла выпуска. + +crossref:freebsd-releng[releng-website, Изменения на веб-сайте в течение цикла выпуска]:: +Изменения на веб-сайте в течение цикла выпуска + +crossref:freebsd-releng[releng-terms, Терминология выпуска релизов]:: +Терминология и общая информация, такие как "мягкая заморозка кода (code +slush)" и "заморозка кода (code freeze)", используемые в этом документе. + +crossref:freebsd-releng[releng-head, Выпуск релиза от {branchHead}]:: +Процесс Release Engineering для релиза "точка-ноль". + +crossref:freebsd-releng[releng-stable, Выпуск релиза от {branchStable}]:: +Процесс Release Engineering для "точечного" выпуска. + +crossref:freebsd-releng[releng-building, Создание установочных носителей FreeBSD]:: +Информация, относящаяся к конкретным процедурам создания установочного +носителя. + +crossref:freebsd-releng[releng-mirrors, Публикация установочных носителей FreeBSD на зеркалах проекта]:: +Процедуры публикации установочного носителя. + +crossref:freebsd-releng[releng-wrapup, Завершение цикла выпуска]:: +Завершение цикла выпуска. + +[[releng-prep]] +== Общая информация и подготовка + +Примерно за два месяца до начала цикла выпуска команда {teamRe} определяет +график выпуска. График включает в себя различные этапы цикла выпуска, такие +как даты заморозки, даты ветвления и даты сборки. Например: + +[.informaltable] +[cols="1,1", frame="none", options="header"] +|=== +| Веха +| Предполагаемая дата + +|мягкая заморозка {branchHead}: +|May 27, 2016 + +|заморозка {branchHead}: +|June 10, 2016 + +|заморозка {branchHead} KBI: +|June 24, 2016 + +|мягкая заморозка дерева `doc/` [1]: +|June 24, 2016 + +|Ежеквартальная ветка Ports [2]: +|July 1, 2016 + +|Ветка {branchStablex}: +|July 8, 2016 + +|`doc/` tree tag [3]: +|July 8, 2016 + +|Начало сборки BETA1: +|July 8, 2016 + +|Разморозка {branchHead}: +|July 9, 2016 + +|Сборка BETA2 начинается: +|July 15, 2016 + +|Сборка BETA3 начинается [*]: +|July 22, 2016 + +|Ветка `{branchRelengx}`: +|July 29, 2016 + +|Сборка RC1 начинается: +|July 29, 2016 + +|Разморозка {branchStablex}: +|July 30, 2016 + +|Сборка RC2 начинается: +|August 5, 2016 + +|Окончательные сборки пакетов Ports [4]: +|August 6, 2016 + +|Метка релиза портов: +|12 августа 2016 + +|Сборка RC3 начинается [*]: +|12 августа 2016 + +|Сборка RELEASE начинается: +|August 19, 2016 + +|Объявление о ВЫПУСКЕ: +|September 2, 2016 +|=== + +[NOTE] +==== +Отметка "[*]" у элементов означает "по мере необходимости". +==== + +. Мягкая заморозка дерева `doc/` координируется командой {teamDoceng}. +. Используемая квартальная ветка Ports определяется по дате запланированной + окончательной сборки `RC`. Новая квартальная ветка создаётся в первый день + квартала, поэтому этот показатель следует учитывать, принимая во внимание + этапы цикла выпуска. Квартальная ветка создаётся командой {teamPortmgr}. +. Для дерева исходного кода `doc/` tag делается командой {teamDoceng}. +. Окончательная сборка пакета Ports выполняется командой {teamPortmgr} после + финальной (или ожидаемой финальной) сборки `RC`. + +[NOTE] +==== +Если выпуск создаётся из существующей ветки {branchStable}, дату заморозки +KBI можно исключить, так как KBI уже считается замороженным в устоявшихся +ветках {branchStable}. +==== + +При написании графика цикла выпуска необходимо учитывать ряд факторов, +особенно этапы, на которые целевая дата зависит от предопределенных этапов, +от которых существует зависимость. Например, тег выпуска коллекции портов +берется из активной квартальной ветки на момент последнего `RC`. Это +частично определяет, какая квартальная ветка используется, когда может быть +создан тег выпуска и какая версия дерева портов используется для финальной +сборки `RELEASE`. + +После общего согласования расписания команда {teamRe} отправляет расписание +разработчикам FreeBSD по электронной почте. + +Вполне типично, что многие разработчики сообщают команде {teamRe} о +различных работах в процессе выполнения. В некоторых случаях может быть +запрошено продление для работы в процессе, а в других случаях может быть +сделан запрос на "общее одобрение" для определенного подмножества дерева. + +При таких запросах важно убедиться, что обсуждаются сроки (даже если они +приблизительные). Для общих одобрений следует четко указать +продолжительность действия такого одобрения. Например, разработчик FreeBSD +может запросить общее одобрение с начала периода мягкой заморозки кода до +начала сборок `RC`. + +[NOTE] +==== +Для отслеживания общих одобрений команда {teamRe} использует внутренний +репозиторий, в котором ведется журнал таких запросов. В нем указывается +область, на которую распространяется общее одобрение, автор(ы), срок +действия одобрения и причина его выдачи. Например, может быть предоставлено +общее одобрение для [.filename]#release/doc/# всем членам {teamRe} до +финального `RC` для обновления примечаний к выпуску и другой связанной с +выпуском документации. +==== + +[NOTE] +==== +Команда {teamRe} также использует этот репозиторий для отслеживания +ожидающих одобрения запросов, полученных непосредственно перед началом +различных сборок во время цикла выпуска, при этом Инженер по выпускам +указывает срок отсечки с помощью электронного письма разработчикам FreeBSD. +==== + +В зависимости от рассматриваемого набора кода и общего влияния этого набора +кода на FreeBSD в целом, такие запросы могут быть одобрены или отклонены +командой {teamRe}. + +То же самое относится к расширениям для незавершённых работ. Например, +незавершённая работа над новым драйвером устройства, который в остальном +изолирован от остального дерева, может получить расширение. Однако новый +планировщик может оказаться неосуществимым, особенно если такие значительные +изменения отсутствуют в другой ветке. + +Расписание также добавляется на сайт проекта в репозитории `doc/`, в файле +[.filename]#~/website/content/en/releases/{branchRevision}R/schedule.adoc#. +Этот файл постоянно обновляется по мере прохождения цикла выпуска. + +[NOTE] +==== +В большинстве случаев файл [.filename]#schedule.adoc# можно скопировать из +предыдущего релиза и обновить соответствующим образом. +==== + +В дополнение к добавлению [.filename]#schedule.adoc# на веб-сайт, файл +[.filename]#~/shared/releases.adoc# также обновляется, чтобы добавить ссылку +на расписание на различные подстраницы, а также включить ссылку на +расписание на главной странице веб-сайта проекта. + +Расписание также доступно по ссылке из файла +[.filename]#~/website/content/en/releng/_index.adoc#. + +Примерно за месяц до запланированной "мягкой заморозки кода" команда +{teamRe} отправляет напоминание разработчикам FreeBSD. + +[[releng-terms]] +== Терминология выпуска релизов + +В этом разделе описана часть терминологии, используемой в остальной части +данного документа. + +[[releng-terms-code-slush]] +=== Мягкая заморозка кода + +Хотя мягкая заморозка кода не является полной заморозкой дерева, команда +{teamRe} просит отдавать приоритет исправлению ошибок в существующей кодовой +базе перед добавлением новых функций. + +Мягкая заморозка кода не требует подтверждений коммитов в ветку. + +[[releng-terms-code-freeze]] +=== Заморозка кода + +Замораживание кода означает момент времени, когда все коммиты в ветку +требуют явного одобрения от {teamRe}. + +Репозиторий FreeBSD Git содержит несколько хуков для выполнения проверок +перед тем, как изменения будут зафиксированы в дереве. Один из этих хуков +проверяет, требуются ли специальные разрешения для фиксации изменений в +определённой ветке. + +Для обеспечения утверждения коммитов командой {teamRe}, команда Release +Engineering должна утверждать любые изменения в ветке. В этом случае журнал +коммитов должен содержать строку `Approved by: re (логин)`, где "логин" — +это идентификатор утверждающего. + +[NOTE] +==== +Во время заморозки кода участники проекта FreeBSD должны следовать +link:https://wiki.freebsd.org/Releng/ChangeRequestGuidelines[Рекомендациям +по запросам изменений]. +==== + +[[releng-terms-kbi-freeze]] +=== Замораживание KBI/KPI + +KBI/KPI стабильность подразумевает, что вызов функции в двух разных релизах +программного обеспечения, реализующего эту функцию, приводит к одинаковому +конечному состоянию. Вызывающая сторона, будь то процесс, поток или функция, +ожидает, что функция будет работать определённым образом, в противном случае +стабильность KBI/KPI на ветке нарушается. + +[[releng-website]] +== Изменения на веб-сайте в течение цикла выпуска + +Этот раздел описывает изменения на веб-сайте, которые должны происходить по +мере развития цикла выпуска. + +[NOTE] +==== +Файлы, указанные в этом разделе, относятся к ветке `{branchHead}` +репозитория `doc`. +==== + +[[releng-website-prerelease]] +=== Изменения на веб-сайте перед началом цикла выпуска + +Когда график цикла выпуска становится доступным, эти файлы необходимо +обновить, чтобы включить различные функции на веб-сайте проекта FreeBSD: + +[.informaltable] +[cols="1,1", frame="none", options="header"] +|=== +| Файл для редактирования +| Что изменить + +|[.filename]#~/shared/releases.adoc# +|Изменить `beta-upcoming` с `IGNORE` на `INCLUDE` + +|[.filename]#~/shared/releases.adoc# +|Изменить `beta-testing` с `IGNORE` на `INCLUDE` + +|=== + +[[releng-website-beta-rc]] +=== Изменения на веб-сайте в период `BETA` или `RC` + +При переходе от `PRERELEASE` к `BETA` эти файлы необходимо обновить, чтобы +включить блок "Help Test (Помогите протестировать)" на странице +загрузки. Все файлы указаны относительно [.filename]#head/# в репозитории +`doc`: + +[.informaltable] +[cols="1,1", frame="none", options="header"] +|=== +| Файл для редактирования +| Что изменить + +|[.filename]#~/shared/releases.adoc# +|Обновите `betarel-vers` до `BETA__1__` + +|[.filename]#~/website/data/en/news/news.toml# +|Добавьте запись, объявляющую о `BETA` + +|[.filename]#~/website/static/security/advisory-template.txt# +|Добавьте новую `BETA`, `RC` или финальную `RELEASE` в шаблон + +|[.filename]#~/website/static/security/errata-template.txt# +|Добавьте новую `BETA`, `RC` или финальную `RELEASE` в шаблон +|=== + +После создания ветки {branchRelengx} необходимо добавить различные +документы, связанные с выпуском, в репозиторий `doc/`. + +[NOTE] +==== +Соответствующие документы, связанные с выпусками, находятся в репозитории +[.filename]#doc# для FreeBSD 12.x и более поздних версий. +==== + +[[releng-ports-beta-rc]] +=== Изменения в портах во время `BETA`, `RC` и финального `RELEASE` + +Для каждой сборки в течение цикла выпуска файлы `MANIFEST`, содержащие +`SHA256` для различных наборов дистрибутива, таких как `base.txz`, +`kernel.txz` и других, добавляются в порт +package:misc/freebsd-release-manifests[]. Это позволяет другим утилитам, +кроме , таким как package:ports-mgmt/poudriere[], безопасно использовать эти +наборы дистрибутива, предоставляя механизм для проверки контрольных сумм. + +[[releng-head]] +== Выпуск релиза от {branchHead} + +Этот раздел описывает общие процедуры цикла выпуска FreeBSD из ветки +{branchHead}. + +[[releng-head-builds-alpha]] +=== FreeBSD "`ALPHA`" сборки + +Начиная с цикла выпуска FreeBSD 10.0-RELEASE, было введено понятие сборок +"`ALPHA`". В отличие от сборок `BETA` и `RC`, сборки `ALPHA` не включены в +график выпуска FreeBSD. + +Идея сборок `ALPHA` заключается в предоставлении регулярных сборок FreeBSD +до создания ветки {branchStable}. + +Снимки состояния `ALPHA` FreeBSD должны собираться примерно раз в неделю. + +Для первой сборки `ALPHA` значение `BRANCH` в +[.filename]#sys/conf/newvers.sh# необходимо изменить с `CURRENT` на +`ALPHA1`. Для последующих сборок `ALPHA` увеличивайте каждое значение +`ALPHA__N__` на единицу. + +См. crossref:freebsd-releng[releng-building, Сборка установочных носителей +FreeBSD] для получения информации о сборке образов `ALPHA`. + +[[releng-head-branching]] +=== Создание ветки {branchStablex} + +При создании ветки {branchStable} необходимо внести несколько изменений как +в новой ветке {branchStable}, так и в ветке {branchHead}. Указанные файлы +относятся к корню репозитория. Чтобы создать новую ветку {branchStablex} в +Git: + +[NOTE] +==== +Убедитесь, что вы находитесь в ветке {branchHead} +==== + +[source, shell, subs="attributes"] +.... +% git checkout -b {branchStablex} +.... + +После создания ветки {branchStablex} внесите следующие изменения: + +[.informaltable] +[cols="1,1", frame="none", options="header"] +|=== +| Файл для редактирования +| Что изменить + +|[.filename]#UPDATING# +|Обновите версию FreeBSD и удалите уведомление о `WITNESS` + +|[.filename]#contrib/jemalloc/include/jemalloc/jemalloc_FreeBSD.h# +a| + +[source,shell,subs="attributes"] +.... +#ifndef MALLOC_PRODUCTION +#define MALLOC_PRODUCTION +#endif +.... + +|[.filename]#lib/clang/llvm.build.mk# +|Раскомментируйте `-DNDEBUG` + +|[.filename]#sys/\*/conf/GENERIC*# +|Удалите поддержку отладки + +|[.filename]#sys/*/conf/MINIMAL# +|Удалите поддержку отладки + +|[.filename]#release/release.conf.sample# +|Обновите `SRCBRANCH` + +|[.filename]#sys/*/conf/GENERIC-NODEBUG# +|Удалите следующие параметры конфигурации ядра + +|[.filename]#sys/arm/conf/std.arm*# +|Удалите отладочные опции + +|[.filename]#sys/conf/newvers.sh# +|Обновите значение `BRANCH`, чтобы оно соответствовало `BETA1` + +|[.filename]#share/mk/src.opts.mk# +|Переместите `REPRODUCIBLE_BUILD` из `\__DEFAULT_NO_OPTIONS` в `__DEFAULT_YES_OPTIONS` + +|[.filename]#share/mk/src.opts.mk# +|Переместите `LLVM_ASSERTIONS` из `\__DEFAULT_YES_OPTIONS` в `__DEFAULT_NO_OPTIONS` + +|[.filename]#libexec/rc/rc.conf# +|Установите `dumpdev` с `AUTO` на `NO` (это настраивается для тех, кто хочет включить его по умолчанию) + +|[.filename]#release/Makefile# +|Удалите записи `debug.witness.trace` +|=== + +Затем в ветке {branchHead}, которая теперь станет новой основной версией: + +[.informaltable] +[cols="1,1", frame="none", options="header"] +|=== +| Файл для редактирования +| Что изменить + +|[.filename]#UPDATING# +|Обновите версию FreeBSD + +|[.filename]#sys/conf/newvers.sh# +|Обновите значение `BRANCH`, чтобы оно соответствовало `CURRENT`, и увеличьте `REVISION` + +|[.filename]#Makefile.inc1# +|Обновите `TARGET_TRIPLE` и `MACHINE_TRIPLE` + +|[.filename]#sys/sys/param.h# +|Обновите `__FreeBSD_version` + +|[.filename]#gnu/usr.bin/cc/cc_tools/freebsd-native.h# +|Обновите `FBSD_MAJOR` и `FBSD_CC_VER` + +|[.filename]#contrib/gcc/config.gcc# +|Добавьте раздел `freebsdversion.h` + +|[.filename]#lib/clang/llvm.build.mk# +|Обновите значение `OS_VERSION` + +|[.filename]#lib/clang/freebsd_cc_version.h# +|Обновите `FREEBSD_CC_VERSION` + +|[.filename]#lib/clang/include/lld/Common/Version.inc# +|Обновите `LLD_REVISION_STRING` + +|[.filename]#Makefile.libcompat# +|Обновите `LIB32CPUFLAGS` +|=== + +[[releng-stable]] +== Выпуск релиза от {branchStable} + +Этот раздел описывает общие процедуры цикла выпуска FreeBSD из установленной +ветки {branchStable}. + +[[releng-stable-slush]] +=== Мягкая заморозка кода ветки `stable` FreeBSD + +В рамках подготовки к заморозке кода в ветке `stable` необходимо обновить +несколько файлов, чтобы отразить официальное начало цикла выпуска. Эти файлы +находятся в корневом каталоге ветки stable: + +[.informaltable] +[cols="1,1", frame="none", options="header"] +|=== +| Файл для редактирования +| Что изменить + +|[.filename]#sys/conf/newvers.sh# +|Обновите значение `BRANCH`, чтобы отразить `PRERELEASE` + +|[.filename]#Makefile.inc1# +|Обновите `TARGET_TRIPLE` + +|[.filename]#lib/clang/llvm.build.mk# +|Обновите `OS_VERSION` + +|[.filename]#Makefile.libcompat# +|Обновите `LIB32CPUFLAGS` +|=== + +[[releng-stable-builds-beta]] +=== Сборки FreeBSD `BETA` + +После периода мягкой заморозки следующая фаза цикла выпуска — это заморозка +кода. На этом этапе все коммиты в стабильную ветку требуют явного одобрения +от {teamRe}. Это контролируется {git-admin-email}, который управляет +репозиторием. + +[NOTE] +==== +Существует два общих исключения, когда не требуется подтверждение коммита во +время цикла выпуска. Первое — любые изменения, которые необходимо +закоммитить инженеру выпуска для продолжения ежедневной работы цикла +выпуска. Второе — исправления безопасности, которые могут возникнуть во +время цикла выпуска. +==== + +После вступления в силу заморозки кода следующая сборка из ветки помечается +как `BETA1`. Это делается путём изменения значения `BRANCH` в файле +[.filename]#sys/conf/newvers.sh# с `PRERELEASE` на `BETA1`. + +После этого начинается первая сборка `BETA`. Последующие сборки `BETA` не +требуют обновления каких-либо файлов, кроме +[.filename]#sys/conf/newvers.sh#, с увеличением номера сборки `BETA`. + +[[releng-stable-branching]] +=== Создание ветки {branchRelengx} + +Когда первая сборка `RC` (Release Candidate) готова к началу, создается +ветка {branchReleng}. Это многоэтапный процесс, который должен выполняться в +определенном порядке, чтобы избежать аномалий, таких как пересечения +значений `__FreeBSD_version`, например. Указанные ниже пути относятся к +корню репозитория. Порядок коммитов и что нужно изменить: + +[NOTE] +==== +Убедитесь, что вы находитесь в ветке {branchStablex} +==== + +[source, shell, subs="attributes"] +.... +% git checkout -b {branchRelengx} +.... + +[.informaltable] +[cols="1,1", frame="none", options="header"] +|=== +| Файл для редактирования +| Что изменить + +|[.filename]#sys/conf/newvers.sh# +|Измените `BETA__X__` на `RC1` + +|[.filename]#sys/sys/param.h# +|Обновите `__FreeBSD_version` + +|[.filename]#sys/conf/kern.opts.mk# +|Переместите `REPRODUCIBLE_BUILD` из `__DEFAULT_NO_OPTIONS` в `__DEFAULT_YES_OPTIONS` + +|[.filename]#etc/pkg/FreeBSD.conf# +|Замените `latest` на `quarterly` в качестве расположения репозитория пакетов по умолчанию + +|[.filename]#release/pkg_repos/release-dvd.conf# +|Замените `latest` на `quarterly` в качестве расположения репозитория пакетов по умолчанию + +|[.filename]#sys/conf/newvers.sh# +|Обновите `BETA__X__` на `PRERELEASE` + +|[.filename]#sys/sys/param.h# +|Обновите `__FreeBSD_version` +|=== + +Затем {git-admin-email} добавляет новых утверждающих для ветки releng, как +это было сделано для ветки stable. + +[source, shell, subs="attributes"] +.... +% git add . +% git commit +.... + +Теперь, когда существуют два новых значения `__FreeBSD_version`, также +обновите файл +[.filename]#~/documentation/content/en/books/porters-handbook/versions/chapter.adoc# +в репозитории проекта документации. + +После завершения первой сборки `RC` и её тестирования ветку {branchStable} +можно «разморозить» с помощью {git-admin-email}. + +После появления первой версии `RC` необходимо отправить письмо команде +{teamBugmeister}, чтобы добавить новую версию FreeBSD `-RELEASE` в список +`versions`, доступный в выпадающем меню трекера ошибок. + +[[releng-building]] +== Создание установочных носителей FreeBSD + +Этот раздел описывает общие процедуры создания снимков разработки и выпусков +FreeBSD. + +[[releng-build-scripts]] +=== Скрипты сборки релизов + +До выхода FreeBSD 9.0-RELEASE файл [.filename]#src/release/Makefile# был +обновлен для поддержки , а скрипт +[.filename]#src/release/generate-release.sh# был добавлен в качестве обертки +для автоматизации вызова целей. + +До выхода FreeBSD 9.2-RELEASE был представлен +[.filename]#src/release/release.sh#, который, основываясь на +[.filename]#src/release/generate-release.sh#, включал поддержку указания +конфигурационных файлов для переопределения различных опций и переменных +окружения. Поддержка конфигурационных файлов обеспечила возможность +кросс-сборки каждого архитектурного варианта для релиза путем указания +отдельного конфигурационного файла для каждого вызова. + +В качестве краткого примера использования +[.filename]#src/release/release.sh# для сборки одного релиза в +[.filename]#/scratch#: + +[source, shell, subs="attributes"] +.... +# /bin/sh /usr/src/release/release.sh +.... + +В качестве краткого примера использования +[.filename]#src/release/release.sh# для сборки единого кросс-собранного +выпуска с использованием другого целевого каталога, создайте +пользовательский [.filename]#release.conf#, содержащий: + +[.programlisting, subs="attributes"] +.... +# release.sh configuration for powerpc/powerpc64 +CHROOTDIR="/scratch-powerpc64" +TARGET="powerpc" +TARGET_ARCH="powerpc64" +KERNEL="GENERIC64" +.... + +Затем выполните [.filename]#src/release/release.sh# следующим образом: + +[source, shell, subs="attributes"] +.... +# /bin/sh /usr/src/release/release.sh -c $HOME/release.conf +.... + +См. [.filename]#src/release/release.conf.sample# для получения +дополнительных сведений и примеров использования. + +[[releng-build-release]] +=== Сборка релизов FreeBSD + +В течение цикла выпуска копии файлов [.filename]#CHECKSUM.SHA512# и +[.filename]#CHECKSUM.SHA256# для каждой архитектуры сохраняются во +внутреннем репозитории {teamRe}, а также включаются в различные рассылки с +объявлениями. Каждый файл [.filename]#MANIFEST#, содержащий хеши +[.filename]#base.txz#, [.filename]#kernel.txz# и других, также добавляется в +пакет package:misc/freebsd-release-manifests[] в Коллекции портов. + +В подготовке к сборке выпуска необходимо обновить несколько файлов: + +[.informaltable] +[cols="1,1", frame="none", options="header"] +|=== +| Файл для редактирования +| Что изменить + +|[.filename]#sys/conf/newvers.sh# +|Обновите значение `BRANCH` на `RELEASE` + +|[.filename]#UPDATING# +|Добавьте предполагаемую дату объявления + +|[.filename]#lib/csu/common/crtbrand.S# +|Замените `__FreeBSD_version` на значение из [.filename]#sys/sys/param.h# +|=== + +После сборки окончательного `RELEASE`, ветка {branchRelengx} помечается как +{tagReleasex}, используя ревизию, из которой был собран +`RELEASE`. Аналогично созданию веток {branchStablex} и {branchRelengx}, это +делается с помощью `git tag`. Из корня репозитория: + +[NOTE] +==== +Убедитесь, что вы находитесь в ветке {branchRelengx} +==== + +[source, shell, subs="attributes"] +.... +% git tag {tagReleasex} +.... + +[[releng-mirrors]] +== Публикация установочных носителей FreeBSD на зеркалах проекта + +Этот раздел описывает процедуру публикации снимков разработки FreeBSD и +выпусков на зеркала Проекта. + +[[releng-mirrors-staging]] +=== Подготовка образов установочных носителей FreeBSD + +Этап подготовки (staging) снимков и выпусков FreeBSD — это двухэтапный +процесс: + +* Создание структуры каталогов, соответствующей иерархии на `ftp-master` ++ +Если `EVERYTHINGISFINE` определено в конфигурационных файлах сборки, +[.filename]#main.conf# в случае скриптов сборки, упомянутых выше, это +происходит автоматически после завершения сборки, создавая структуру +каталогов в [.filename]#${DESTDIR}/R/ftp-stage# с путями, соответствующими +ожидаемым на `ftp-master`. Это эквивалентно выполнению следующего в +директории: ++ +[source, shell, subs="attributes"] +.... +# make -C /usr/src/release -f Makefile.mirrors EVERYTHINGISFINE=1 ftp-stage +.... ++ +После сборки каждой архитектуры скрипт [.filename]#thermite.sh# выполнит +синхронизацию [.filename]#${DESTDIR}/R/ftp-stage# с билда в директории +[.filename]#/snap/ftp/snapshots# или [.filename]#/snap/ftp/releases# на +хосте сборки, соответственно. +* Копирование файлов в промежуточный каталог на `ftp-master` перед + перемещением файлов в [.filename]#pub/# для начала распространения на + зеркала Проекта ++ +После завершения всех сборок каталог [.filename]#/snap/ftp/snapshots# (или +[.filename]#/snap/ftp/releases# для релиза) опрашивается `ftp-master`-ом с +использованием rsync для передачи в [.filename]#/archive/tmp/snapshots# или +[.filename]#/archive/tmp/releases#, соответственно. ++ +[NOTE] +==== +На `ftp-master` в инфраструктуре проекта FreeBSD этот шаг требует доступа +уровня `root`, так как он должен выполняться от имени пользователя +`archive`. +==== + +[[releng-mirrors-publishing]] +=== Публикация установочных носителей FreeBSD + +Как только образы размещены в [.filename]#/archive/tmp/#, они готовы к +публикации путем размещения в [.filename]#/archive/pub/FreeBSD#. Для +уменьшения времени распространения используются жесткие ссылки из +[.filename]#/archive/tmp# в [.filename]#/archive/pub/FreeBSD#. + +[NOTE] +==== +Для эффективной работы и [.filename]#/archive/tmp#, и +[.filename]#/archive/pub# должны находиться в одной логической файловой +системе. +==== + +Однако есть оговорка: после этого необходимо использовать rsync для +исправления символических ссылок в +[.filename]#pub/FreeBSD/snapshots/ISO-IMAGES#, которые будут заменены на +жёсткие ссылки, что увеличит время распространения. + +[NOTE] +==== +Как и на этапе подготовки, это требует доступа уровня `root`, так как данный +шаг должен быть выполнен от имени пользователя `archive`. +==== + +Как пользователь `archive`: + +[source, shell, subs="attributes"] +.... +% cd /archive/tmp/snapshots +% pax -r -w -l . /archive/pub/FreeBSD/snapshots +% /usr/local/bin/rsync -avH /archive/tmp/snapshots/* /archive/pub/FreeBSD/snapshots/ +.... + +Замените _снимки_ на _релизы_ там, где это уместно. + +[[releng-wrapup]] +== Завершение цикла выпуска + +Этот раздел описывает общие задачи после выпуска. + +[[releng-wrapup-en]] +=== Уведомления об исправлениях после выпуска + +По мере приближения цикла выпуска к завершению часто появляются несколько +кандидатов в EN (Errata Notice — уведомления об ошибках) для устранения +проблем, обнаруженных на поздних этапах цикла. После выпуска {teamRe} и +{teamSecteam} пересматривают изменения, которые не были одобрены до +финального выпуска, и, в зависимости от масштаба рассматриваемого изменения, +могут выпустить EN. + +[NOTE] +==== +Фактический процесс выпуска EN обрабатывается командой {teamSecteam}. +==== + +Для запроса уведомления об ошибке после завершения цикла выпуска разработчик +должен заполнить https://www.freebsd.org/security/errata-template.txt[шаблон +уведомления об ошибке], в частности разделы `Предыстория`, `Описание +проблемы`, `Последствия` и, если применимо, `Обходное решение`. + +Заполненный шаблон уведомления об ошибке следует отправить по электронной +почте вместе с патчем для ветки {branchReleng} или списком ревизий из ветки +{branchStable}. + +Для запросов на уведомления об ошибках (Errata Notice), поступающих сразу +после выпуска, запрос следует отправлять по электронной почте как в +{teamRe}, так и в {teamSecteam}. После того как ветка {branchReleng} +передана {teamSecteam}, как описано в +crossref:freebsd-releng[releng-wrapup-handoff, Передача {teamSecteam}], +запросы на уведомления об ошибках следует направлять в {teamSecteam}. + +[[releng-wrapup-handoff]] +=== Передача в {teamSecteam} + +Примерно через две недели после выпуска релиза инженер по релизам обновляет +репозиторий Git, изменяя утверждающего с команды инженеров по релизам на +офицера безопасности для ветки `{branchRelengx}`. + +[[releng-eol]] +== Конец срока поддержки выпуска + +Этот раздел описывает файлы, связанные с веб-сайтом, которые необходимо +обновить, когда выпуск достигает EoL (End-of-Life). + +[[releng-eol-website]] +=== Обновления веб-сайта для прекращения поддержки + +Когда выпуск достигает конца жизненного цикла, ссылки на этот выпуск должны +быть удалены и/или обновлены на веб-сайте: + +[.informaltable] +[cols="1,1", frame="none", options="header"] +|=== +| Файл +| Что изменить + +|[.filename]#~/website/themes/beastie/layouts/index.html# +|Удалите ссылки на `u-relXXX-announce` и `u-relXXX-announce`. + +|[.filename]#~/website/content/en/releases/_index.adoc# +|Переместите переменные `u-relXXX-*` из списка поддерживаемых выпусков в список Устаревших выпусков. + +|[.filename]#~/website/content/en/releng/_index.adoc# +|Обновите соответствующую ветку releng, чтобы отразить, что ветка больше не поддерживается. + +|[.filename]#~/website/content/en/security/_index.adoc# +|Удалить ветку из списка поддерживаемых веток. + +|[.filename]#~/website/content/en/security/unsupported.adoc# +|Добавить ветку в список неподдерживаемых веток. + +|[.filename]#~/website/content/en/where.adoc# +|Удалите URL-адреса для выпуска. + +|[.filename]#~/website/themes/beastie/layouts/partials/sidenav.html# +|Удалите ссылки на `u-relXXX-announce` и `u-relXXX-announce`. + +|[.filename]#~/website/static/security/advisory-template.txt# +|Удалите ссылки на ветку release и releng. + +|[.filename]#~/website/static/security/errata-template.txt# +|Удалите ссылки на ветку release и releng. +|=== |
