aboutsummaryrefslogtreecommitdiff
path: root/ru_RU.KOI8-R/articles/releng/article.xml
diff options
context:
space:
mode:
Diffstat (limited to 'ru_RU.KOI8-R/articles/releng/article.xml')
-rw-r--r--ru_RU.KOI8-R/articles/releng/article.xml1153
1 files changed, 1153 insertions, 0 deletions
diff --git a/ru_RU.KOI8-R/articles/releng/article.xml b/ru_RU.KOI8-R/articles/releng/article.xml
new file mode 100644
index 0000000000..f51c33ed7b
--- /dev/null
+++ b/ru_RU.KOI8-R/articles/releng/article.xml
@@ -0,0 +1,1153 @@
+<?xml version="1.0" encoding="koi8-r" standalone="no"?>
+<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V4.2-Based Extension//EN"
+ "../../../share/sgml/freebsd42.dtd" [
+<!ENTITY % entities PUBLIC "-//FreeBSD//ENTITIES DocBook FreeBSD Entity Set//RU" "../../share/sgml/entities.ent">
+%entities;
+<!ENTITY art.re.pkgs '<ulink url="&url.articles.releng-packages;/article.html">The Release Engineering of Third Party Packages</ulink>'>
+]>
+
+<!--
+ The FreeBSD Russian Documentation Project
+
+ $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/releng/article.xml,v 1.15 2006/03/22 16:48:41 marck Exp $
+
+ Original revision: r38826
+-->
+
+<article lang="ru">
+ <title>Подготовка релизов &os;</title>
+
+ <articleinfo>
+ <!-- Эта работа была представлена на BSDCon Europe в Брайтоне,
+ Великобритания, 11 ноября 2001 -->
+
+ <confgroup>
+ <confdates>Ноябрь 2001</confdates>
+
+ <conftitle>BSDCon Europe</conftitle>
+ </confgroup>
+
+ <authorgroup>
+ <author>
+ <firstname>Murray</firstname>
+
+ <surname>Stokely</surname>
+
+ <authorblurb>
+ <para>Я участвовал в разработке продуктов на основе &os; с
+ 1997 года в компаниях Walnut Creek CDROM, BSDi, а теперь Wind River
+ Systems. &os;&nbsp;4.4 была первым официальным релизом &os;, в
+ выпуске которого я принимал значительное участие.</para>
+ </authorblurb>
+
+ <affiliation>
+ <address>
+ <email>murray@FreeBSD.org</email>
+
+ <otheraddr><ulink
+ url="http://www.FreeBSD.org/~murray/"></ulink></otheraddr>
+ </address>
+ </affiliation>
+ </author>
+ </authorgroup>
+
+ <legalnotice id="trademarks" role="trademarks">
+ &tm-attrib.freebsd;
+ &tm-attrib.cvsup;
+ &tm-attrib.intel;
+ &tm-attrib.general;
+ </legalnotice>
+
+ <pubdate>$FreeBSD$</pubdate>
+
+ <releaseinfo>$FreeBSD$</releaseinfo>
+
+ <abstract>
+ <para>В этой статье описывается подход, который используется группой
+ подготовки релизов &os; для создания качественных версий
+ Операционной Системы &os;. В ней детально описывается методология,
+ используемая для официальных релизов &os; и рассказывается об
+ инструментах, доступных тем, кто интересуется созданием
+ модифицированных релизов &os; для тиражирования внутри организации
+ или в коммерческих целях.</para>
+ </abstract>
+ </articleinfo>
+
+ <!-- Введение -->
+
+ <sect1 id="introduction">
+ <title>Введение</title>
+
+ <para>Разработка &os; представляет собой весьма открытый процесс.
+ &os; составляется в результате общих усилий тысяч людей по всему миру.
+ Проект &os; предоставляет анонимный публичный доступ по протоколу
+ <acronym>CVS</acronym>[1], так что любой может получить доступ к журналу
+ изменений, разницам (патчам) между ветками разработки и другим
+ продвинутым возможностям, которые даёт строгое управление исходным кодом.
+ Это сильно помогает в привлечении к &os; всё большего количества
+ талантливых разработчиков. Однако, и я думаю, что все со мной
+ согласятся, наступит хаос, если доступ по записи будет открыт всем в
+ Internet. Поэтому только <quote>избранная</quote> группа примерно из
+ 300 человек имеет доступ по записи в <acronym>CVS</acronym>-хранилище.
+ Эти <emphasis>коммиттеры[5]</emphasis> отвечают в целом за разработку
+ &os;. Выбираемая из самых заслуженных разработчиков <emphasis>группа
+ правления[6]</emphasis> обеспечивает некоторый уровень управления
+ проектом.</para>
+
+ <para>Темп разработок, ведущихся во <systemitem
+ class="osname">&os;</systemitem>, оставляет мало времени на тщательную
+ доводку системы до качества продуктивного релиза. Для решения этой
+ проблемы разработка ведётся в два параллельных потока. Основной веткой
+ разработки является <emphasis>HEAD</emphasis>, она же <emphasis>основная
+ линия</emphasis> нашего дерева CVS, известная также под именем
+ <quote>&os;-CURRENT</quote> или, для краткости,
+ <quote>-CURRENT</quote>.</para>
+
+ <para>Поддерживается и более стабильная ветка, известная как
+ <quote>&os;-STABLE</quote> или, для краткости, <quote>-STABLE</quote>.
+ Обе ветки находятся в основном CVS-хранилище в Калифорнии и реплицируются
+ при помощи <application class="software">CVSup</application>[2] на
+ зеркала по всему миру. &os;-CURRENT[7] является <quote>передним
+ краем</quote> работ над FreeBSD, через который попадают все изменения в
+ системе. &os;-STABLE является веткой разработки, из которой создаются
+ основные релизы. В эту ветку изменения попадают разными путями, и
+ предполагается, что сначала они попали в &os;-CURRENT, где были
+ тщательно протестированы сообществом наших пользователей.</para>
+
+ <para>В промежутке между релизами машинами Проекта &os;, выделенными для
+ построения системы, ежемесячно автоматически собираются снэпшоты,
+ которые доступны для закачки по адресу <systemitem
+ class="resource">ftp://ftp.freebsd.org/pub/FreeBSD/snapshots/</systemitem>.
+ Общедоступность
+ снэпшотов бинарных релизов, а также желание сообщества наших
+ пользователей отслеживать работу над -STABLE при помощи CVSup и
+ <quote><command>make</command> <maketarget>world</maketarget></quote>[7]
+ помогает поддержать весьма хорошее качество &os;-STABLE, даже до
+ выполнения мероприятий проверки качества, предваряющих выпуск основных
+ релизов.</para>
+
+ <para>В процессе выпуска релиза пользователи постоянно присылают сообщения
+ об ошибках и пожелания по расширению функциональности. Сообщения о
+ проблемах попадают в нашу базу данных <application
+ class="software">GNATS</application>[8] по электронной почте, посредством
+ утилиты &man.send-pr.1; или через Web-интерфейс, доступный по адресу
+ <ulink url="http://www.FreeBSD.org/send-pr.html"></ulink>.</para>
+
+ <para>Для удовлетворения наших самых консервативно настроенных
+ пользователей, начиная с &os;&nbsp;4.3, появились ветки для отдельных
+ релизов. Эти ветки создаются вскоре после того, как выпускается
+ окончательный релиз. После его выхода в ветку релиза помещаются только
+ самые критичные исправления и добавления, касающиеся безопасности. Кроме
+ обновлений исходных текстов посредством CVS, для систем веток
+ <emphasis>RELENG_<replaceable>X</replaceable>_<replaceable>Y</replaceable></emphasis>
+ имеются и бинарные наборы патчей.</para>
+
+ <sect2>
+ <title>Что обсуждается в данном документе?</title>
+
+ <para>В последующих главах этой статьи обсуждаются:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><xref linkend="release-proc"/></term>
+
+ <listitem>
+ <para>Различные этапы процесса подготовки релиза вплоть до
+ построения актуальной системы.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><xref linkend="release-build"/></term>
+
+ <listitem>
+ <para>Процесс сборки.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><xref linkend="extensibility"/></term>
+
+ <listitem>
+ <para>Как базовый релиз может быть расширен
+ третьими сторонами.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><xref linkend="lessons-learned"/></term>
+
+ <listitem>
+ <para>Некоторые из уроков, полученных при выпуске релиза
+ &os;&nbsp;4.4.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><xref linkend="future"/></term>
+
+ <listitem>
+ <para>Направления будущих работ.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ </sect2>
+
+ </sect1>
+
+ <!-- Процесс выпуска релиза -->
+ <sect1 id="release-proc">
+ <title>Процесс выпуска релиза</title>
+
+ <para>Новые релизы &os; выпускаются из ветки -STABLE с интервалом
+ примерно в четыре месяца. Процесс выпуска релизов &os; начинается за
+ 45 дней до предполагаемой даты релиза с того, что ответственный за релиз
+ посылает сообщение по электронной почте в адрес списков рассылки для
+ разработчиков, чтобы напомнить последним о наличии всего лишь 15 дней на
+ внесение новых изменений до момента заморозки кода. В этот период многие
+ разработчики выполняют действия, известные как
+ <quote>MFC-переносы</quote>. <acronym>MFC</acronym> означает
+ <quote>Merge From CURRENT</quote> (перенос из CURRENT) и описывает
+ процесс переноса протестированных изменений из нашего дерева разработки
+ -CURRENT в наше дерево -STABLE.</para>
+
+ <sect2>
+ <title>Просмотр кода</title>
+
+ <para>За тридцать дней до предполагаемого релиза хранилище исходных
+ текстов переводится в режим <quote>стабилизации кода</quote>. В этот
+ период все изменения в дереве -STABLE должны подтверждаться &a.re;.
+ В первый 15-дневный период разрешены следующие типы изменений:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Исправления ошибок.</para>
+ </listitem>
+
+ <listitem>
+ <para>Обновление документации.</para>
+ </listitem>
+
+ <listitem>
+ <para>Исправления любого характера, касающиеся безопасности.</para>
+ </listitem>
+
+ <listitem>
+ <para>Незначительные исправления в драйверах устройств, такие, как,
+ например, добавление новых ID устройств.</para>
+ </listitem>
+
+ <listitem>
+ <para>Любые другие изменения, которые одобряет группа подготовки
+ релиза, с учётом потенциального риска.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>После первых 15 дней стабилизации кода выпускается
+ <emphasis>предварительный релиз</emphasis>, предназначенный для широкого
+ тестирования, а код переводится в состояние <quote>заморозки</quote>,
+ когда становится гораздо труднее доказывать необходимость внесения
+ новых изменений в систему, если они не касаются исправления серьёзных
+ ошибок или информационной безопасности. Во время заморозки кода каждую
+ неделю выпускается не менее одной предварительной версии релиза, до тех
+ пор, пока не будет готов окончательный вариант релиза. В дни,
+ предшествующие выпуску окончательного релиза, группа его подготовки
+ работает в постоянном контакте со службой безопасности и людьми,
+ поддерживающими документацию и порты, чтобы обеспечить доступность всех
+ компонентов, необходимых для успешного выпуска релиза.</para>
+ </sect2>
+
+ <sect2>
+ <title>Контрольный список для проверки окончательного релиза</title>
+
+ <para>После того, как для широкого тестирования было выпущено несколько
+ предварительных релизов и все основные проблемы были решены, может
+ начаться процесс <quote>шлифовки</quote> окончательного релиза.</para>
+
+ <sect3 id="rel-branch">
+ <title>Создание ветки релиза</title>
+
+ <para>Как сказано во вводной части, ветка
+ <literal>RELENG_<replaceable>X</replaceable>_<replaceable>Y</replaceable></literal>
+ является сравнительно новым добавлением в нашей методологии
+ подготовки релизов. Первым шагом в создании этой ветки является
+ проверка того, что вы работаете с самой последней версией исходных
+ текстов <literal>RELENG_<replaceable>X</replaceable></literal>, из
+ <emphasis>которой</emphasis> вы хотите создать новую ветку.</para>
+
+ <screen>/usr/src&prompt.root; <userinput>cvs update -rRELENG_4 -P -d</userinput></screen>
+
+ <para>Следующим шагом является создание <emphasis>тэга</emphasis> точки
+ ответвления, чтобы диффы облегчили работу с началом ветки в CVS:</para>
+
+ <screen>/usr/src&prompt.root; <userinput>cvs rtag -rRELENG_4 RELENG_4_8_BP src</userinput></screen>
+
+ <para>После этого создаётся тэг новой ветки по команде:</para>
+
+ <screen>/usr/src&prompt.root; <userinput>cvs rtag -b -rRELENG_4_8_BP RELENG_4_8 src</userinput></screen>
+
+ <note>
+ <para><emphasis>Использование тэгов
+ <literal>RELENG_<replaceable>*</replaceable></literal> разрешено
+ только менеджерам CVS и участникам группы по выпуску
+ релизов.</emphasis></para>
+ </note>
+
+ <sidebar>
+ <para><quote><emphasis>Тэгом</emphasis></quote> в понятии CVS
+ называют метку, которая идентифицирует исходный текст в некоторый
+ момент времени. Вводя тэг в дерево, мы обеспечиваем то, что в
+ будущем тот, кто строит релиз, всегда сможет воспользоваться тем же
+ самым кодом, что использовался нами для создания официальных
+ релизов Проекта &os;.</para>
+ </sidebar>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="branches-head" align="center"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>Ветви разработки &os;</phrase>
+ </textobject>
+ </mediaobject>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="branches-releng3" align="center"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>Ветка &os;&nbsp;3.x STABLE</phrase>
+ </textobject>
+ </mediaobject>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="branches-releng4" align="center"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>Ветка &os;&nbsp;4.x STABLE</phrase>
+ </textobject>
+ </mediaobject>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="branches-releng5" align="center"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>Ветка &os;&nbsp;5.x STABLE</phrase>
+ </textobject>
+ </mediaobject>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="branches-releng6" align="center"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>Ветка &os;&nbsp;6.x STABLE</phrase>
+ </textobject>
+ </mediaobject>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="branches-releng7" align="center"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>Ветка &os;&nbsp;7.x STABLE</phrase>
+ </textobject>
+ </mediaobject>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="branches-releng8" align="center"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>Ветка &os;&nbsp;8.x STABLE</phrase>
+ </textobject>
+ </mediaobject>
+
+ <mediaobject>
+ <imageobject>
+ <imagedata fileref="branches-releng9" align="center"/>
+ </imageobject>
+
+ <textobject>
+ <phrase>Ветка &os;&nbsp;9.x STABLE</phrase>
+ </textobject>
+ </mediaobject>
+ </sect3>
+
+ <sect3 id="versionbump">
+ <title>Увеличение номера версии</title>
+
+ <para>Перед тем, как окончательный релиз будет помечен, построен и
+ выпущен, необходимо модифицировать следующие файлы, отразив в них
+ корректную версию &os;:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><filename>doc/ru_RU.KOI8-R/books/handbook/mirrors/chapter.xml</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>doc/en_US.ISO8859-1/books/porters-handbook/book.xml</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>doc/share/sgml/freebsd.ent</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/Makefile.inc1</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/UPDATING</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/gnu/usr.bin/groff/tmac/mdoc.local</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/release/Makefile</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/release/doc/en_US.ISO8859-1/share/sgml/release.dsl</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/release/doc/share/examples/Makefile.relnotesng</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/release/doc/share/sgml/release.ent</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/share/examples/cvsup/standard-supfile</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/sys/conf/newvers.sh</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/sys/sys/param.h</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/usr.sbin/pkg_install/add/main.c</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>www/en/docs/man.xml</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>www/en/cgi/ports.cgi</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>ports/Tools/scripts/release/config</filename></para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Новый релиз должен быть также отражён в файлах замечаний к релизу
+ и информации о замеченных ошибках (в ветке релиза), а файлы
+ соответствующим образом обрезаны (в ветке stable/current):</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><filename>src/release/doc/en_US.ISO8859-1/relnotes/common/new.xml</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/release/doc/en_US.ISO8859-1/errata/article.xml</filename></para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Утилита <application>sysinstall</application> должна быть
+ обновлена и указывать количество доступных портов и объём дискового
+ пространства, требуемого для Коллекции Портов[4]. На данный момент эта
+ информация хранится в файле
+ <filename>src/usr.sbin/sysinstall/dist.c</filename>.</para>
+
+ <para>После построения релиза для оповещения мирового сообщества о
+ выпуске релиза необходимо обновить некоторые файлы.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><filename>doc/share/images/articles/releng/branches-releng<replaceable>X</replaceable>.pic</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>www/share/sgml/advisories.xml</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>www/share/sgml/includes.release.xml</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>www/share/sgml/includes.release.xsl</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>www/en/releases/*</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>www/en/releng/index.xml</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>www/en/news/news.xml</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>www/en/search/web.atoz</filename></para>
+ </listitem>
+
+ <listitem>
+ <para><filename>src/share/misc/bsd-family-tree</filename></para>
+ </listitem>
+ </itemizedlist>
+ </sect3>
+
+ <sect3 id="versionbump-major">
+ <title>Подготовка новой старшей релиз ветки
+ (RELENG_<replaceable>X</replaceable>)</title>
+
+ <para>Когда новая старшая релиз ветка, такая как <literal>RELENG_6</literal>
+ ответвляется из HEAD, некоторые дополнительные файлы должны
+ быть обновлены перед тем, как релизы будут созданы из
+ этой новой ветки.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><filename>src/share/examples/cvsup/stable-supfile</filename>
+ - когда применимо, должен быть обновлен, чтобы указывать на новую
+ -STABLE ветку.</para>
+ </listitem>
+ </itemizedlist>
+
+ </sect3>
+
+ <sect3>
+ <title>Создание тэгов релиза</title>
+
+ <para>При готовности окончательного релиза следующая команда создаст
+ тэг <literal>RELENG_4_8_0_RELEASE</literal>.</para>
+
+ <screen>/usr/src&prompt.root; <userinput>cvs rtag -rRELENG_4_8 RELENG_4_8_0_RELEASE src</userinput></screen>
+
+ <para>Менеджеры документации и портов отвечают за внесение тэга в
+ соответствующие ветки с тэгом
+ <literal>RELEASE_4_8_0</literal>.</para>
+
+ <para>Иногда в последний момент, уже <emphasis>после</emphasis>
+ создания последних тэгов может потребоваться внесение исправлений.
+ На практике это не является проблемой, так как <acronym>CVS</acronym>
+ позволяет выполнять манипуляции с тэгами по команде <command>cvs
+ tag -d <replaceable>tagname filename</replaceable></command>. Очень
+ важно, чтобы все последние изменения были помечены соответствующим
+ тэгом, как часть релиза. Релизы &os; должны быть всегда
+ повторяемыми. Локальные изменения в параметры окружения выпускающего
+ релиз недопустимы.</para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <!-- Построение релизов -->
+ <sect1 id="release-build">
+ <title>Построение релизов</title>
+
+ <para><quote>Релизы</quote> &os; могут быть построены любым человеком,
+ имеющим быстродействующую машину и доступ к хранилищу исходных текстов.
+ (Это должен быть любой, так как мы предоставляем анонимный доступ к CVS!
+ Обратитесь к Руководству для прояснения деталей.)
+ <emphasis>Единственным</emphasis> особым требованием является наличие
+ устройства &man.md.4;. Если устройство в вашем ядре
+ не подгружено, то модуль ядра должен быть подгружен автоматически при
+ выполнении команды &man.mdconfig.8; на этапе создания носителя для
+ загрузки. Все инструменты, необходимые для построения релиза, доступны
+ из хранилища CVS в каталоге <filename>src/release</filename>. Эти
+ инструменты предоставляют единый метод построения релизов &os;.
+ Полный релиз может быть реально построен при помощи лишь одной команды,
+ включая создание <acronym>ISO</acronym>-образов, подходящих для записи на
+ CDROM, установочных дискет и установочного каталога FTP. Эта команда
+ называется соответствующим образом: <command>make
+ release</command>.</para>
+
+ <sect2>
+ <title><command>make release</command></title>
+
+ <para>Для успешного построения релиза вы должны сначала заполнить каталог
+ <filename>/usr/obj</filename>, запустив команду <command>make
+ world</command> или просто <command>make buildworld</command>. Цель,
+ выполняемая для построения релиза, требует корректного задания
+ нескольких переменных, используемых при его сборке:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><makevar>CHROOTDIR</makevar> - Каталог, используемый в среде с
+ изменённой корневой файловой системой при построении полного
+ релиза.</para>
+ </listitem>
+
+ <listitem>
+ <para><makevar>BUILDNAME</makevar> - Наименование строящегося
+ релиза.</para>
+ </listitem>
+
+ <listitem>
+ <para><makevar>CVSROOT</makevar> - Местонахождение
+ CVS-хранилища.</para>
+ </listitem>
+
+ <listitem>
+ <para><makevar>RELEASETAG</makevar> - Тэг CVS, соответствующий
+ релизу, который вы собираетесь строить.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Если у вас ещё нет доступа к локальному CVS-хранилищу, то вы можете
+ зеркалировать одно из них при помощи <ulink
+ url="http://www.FreeBSD.org/doc/ru_RU.KOI8-R/books/handbook/synching.html#CVSUP">
+ CVSup</ulink>. Поставляемый sup-файл,
+ <filename>/usr/share/examples/cvsup/cvs-supfile</filename>, может
+ служить хорошей отправной точкой для зеркалирования хранилища
+ CVS.</para>
+
+ <para>Если <makevar>RELEASETAG</makevar> опущен, то релиз будет строиться
+ из ветки <literal>HEAD</literal> (известной как -CURRENT). Релизы,
+ строящиеся из этой ветки обычно называют <quote>снэпшотами
+ -CURRENT</quote>.</para>
+
+ <para>Для настройки построения релиза существует много других переменных
+ Большинство из этих переменных описаны в начале файла
+ <filename>src/release/Makefile</filename>. Точная команда, служащая
+ для построения официального релиза &os;&nbsp;4.7 (x86) такова:</para>
+
+ <screen><command>make <literal>release CHROOTDIR=/local3/release \
+ BUILDNAME=4.7-RELEASE \
+ CVSROOT=/host/cvs/usr/home/ncvs \
+ RELEASETAG=RELENG_4_7_0_RELEASE</literal></command></screen>
+
+ <para><filename>Makefile</filename> для релиза может быть разбит на
+ несколько различных шагов.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Создание чистого системного окружения в отдельной иерархии
+ каталогов по команде <quote><command>make
+ <literal>installworld</literal></command></quote>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Выгрузка из CVS чистой версии исходных текстов системы,
+ документации и портов в иерархию для построения релиза.</para>
+ </listitem>
+
+ <listitem>
+ <para>Создание копии <filename>/etc</filename> и
+ <filename>/dev</filename> в окружении с изменённым корнем файловой
+ системы.</para>
+ </listitem>
+
+ <listitem>
+ <para>Смена корневой файловой системы на иерархию построения релиза,
+ чтобы избежать влияния внешнего окружения на построение.</para>
+ </listitem>
+
+ <listitem>
+ <para>Выполнение <command>make world</command> в окружении с
+ изменённой корневой файловой системой.</para>
+ </listitem>
+
+ <listitem>
+ <para>Построение бинарных файлов для работы с Kerberos.</para>
+ </listitem>
+
+ <listitem>
+ <para>Построение ядра <filename>GENERIC</filename>.</para>
+ </listitem>
+
+ <listitem>
+ <para>Создание промежуточного дерева каталогов, где будут строиться
+ бинарные файлы и формироваться дистрибутивы.</para>
+ </listitem>
+
+ <listitem>
+ <para>Построение и установка инструментов для работы с документацией,
+ необходимых для преобразования исходных текстов документации (SGML)
+ в формат HTML и текстовые документы, которые сопутствуют
+ релиз.</para>
+ </listitem>
+
+ <listitem>
+ <para>Построение и установка актуальной документации (руководства
+ пользователей, учебники, замечания к релизу, перечень аппаратной
+ совместимости и так далее.)</para>
+ </listitem>
+
+ <listitem>
+ <para>Построение <quote>свёрнутых</quote> бинарных файлов,
+ используемых на установочных дискетах.</para>
+ </listitem>
+
+ <listitem>
+ <para>Подготовка дистрибутивных архивов бинарных файлов и исходных
+ текстов.</para>
+ </listitem>
+
+ <listitem>
+ <para>Создание загрузочного носителя
+ и <quote>fixit</quote>-дискеты.</para>
+ </listitem>
+
+ <listitem>
+ <para>Создание иерархии для установки при помощи FTP.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>(опционально)</emphasis> Создание образов ISO для
+ носителей CDROM/DVD.</para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Для получения более полной информации об инфраструктуре построения
+ релизов, пожалуйста, обратитесь к справочной странице
+ по &man.release.7;.</para>
+
+ <note>
+ <para>Важно, чтобы из файла <filename>/etc/make.conf</filename> были
+ удалены все установки, специфичные для конкретного хоста. К примеру,
+ будет глупо распространять бинарные файлы, построенные на системе с
+ переменной <varname>CPUTYPE</varname>, указывающей на определённый
+ тип процессора.</para>
+ </note>
+ </sect2>
+
+ <sect2>
+ <title>Программное обеспечение третьих лиц (<quote>ports</quote>)</title>
+
+ <para><ulink url="http://www.FreeBSD.org/ports">Коллекция портов
+ &os;</ulink> содержит более &os.numports; программных пакетов
+ сторонних разработчиков, которые доступны для &os;. За поддержку
+ целостности дерева портов, которое может использоваться для создания
+ бинарных пакетов, поставляемых с официальными релизами &os;,
+ отвечает &a.portmgr;.</para>
+
+ <para>Рассмотрение работ с нашей коллекцией пакетов сторонних
+ разработчиков при подготовке релизов выходит за рамки этого
+ документа. Этот вопрос глубоко рассмотрен в отдельной
+ статье, &art.re.pkgs;.</para>
+ </sect2>
+
+ <sect2>
+ <title>ISO с релизами</title>
+
+ <para>Начиная с &os;&nbsp;4.4, Проект &os; принял решение распространять
+ все четыре образа ISO, ранее продаваемые через
+ <emphasis>BSDi/Wind River Systems/FreeBSD Mall</emphasis> как
+ <quote>официальные</quote> дистрибутивы на CDROM. Каждый из четырёх
+ дисков должен содержать файл <filename>README.TXT</filename>,
+ описывающий содержимое диска, файл <filename>CDROM.INF</filename>, в
+ котором находятся мета-данные о диске для того, чтобы
+ &man.sysinstall.8; мог проверять и использовать содержимое, а также
+ файл <filename>filename.txt</filename>, содержащий перечень содержимого
+ на диске. Этот <emphasis>перечень</emphasis> может быть создан простой
+ командой:</para>
+
+ <screen>/stage/cdrom&prompt.root; <userinput>find . -type f | sed -e 's/^\.\///' | sort > filename.txt</userinput></screen>
+
+ <para>Специфичные требования для каждого CD описываются ниже.</para>
+
+ <sect3>
+ <title>Диск 1</title>
+
+ <para>Первый диск практически полностью создаётся командой
+ <command>make release</command>. Единственным изменением, которое
+ нужно внести в каталог <filename>disc1</filename>, является
+ добавление подкаталога <filename>tools</filename>,
+ а также перенос максимально
+ возможного количества программных пакетов сторонних разработчиков,
+ которые поместятся на диск. Каталог <filename>tools</filename>
+ содержит программное обеспечение, позволяющее пользователям создавать
+ установочные дискеты из других операционных систем. Этот диск нужно
+ сделать загрузочным, чтобы пользователям современных ПК не нужно было
+ создавать установочные дискеты.</para>
+
+ <para>Если в релиз необходимо включить специализированное ядро, то
+ необходимо модифицировать &man.sysinstall.8; и &man.release.7;,
+ добавив в них инструкции по установке. Соответствующий код
+ находится в <filename>src/release</filename> и
+ <filename>src/usr.sbin/sysinstall</filename>. В частности,
+ в <filename>src/usr.sbin/sysinstall</filename> необходимо будет
+ редактировать <filename>src/release/Makefile</filename>,
+ <filename>dist.c</filename>, <filename>dist.h</filename>,
+ <filename>menus.c</filename>, <filename>install.c</filename> и
+ <filename>Makefile</filename>. Также может потребоваться обновить
+ <filename>sysinstall.8</filename>.</para>
+ </sect3>
+
+ <sect3>
+ <title>Диск 2</title>
+
+ <para>Второй диск также в основном создаётся по команде <command>make
+ release</command>. Он содержит <quote>живую файловую
+ систему</quote>, которую можно использовать из &man.sysinstall.8; для
+ исправления процесса установки &os;. Этот диск должен быть
+ загрузочным и содержать также упакованную копию хранилища CVS в
+ каталоге <filename>CVSROOT</filename> и демонстрационные версии
+ коммерческого программного обеспечения в каталоге
+ <filename>commerce</filename>.</para>
+ </sect3>
+
+ <sect3>
+ <title>Диски 3 и 4</title>
+
+ <para>Оставшиеся два диска содержат дополнительные программные пакеты
+ для &os;. Они должны быть объединены в группы (кластеры), чтобы
+ отдельный пакет и все его <emphasis>зависимости</emphasis> находились
+ на одном и том же диске. Дополнительная информация о создании этих
+ дисков находится в статье &art.re.pkgs;.</para>
+ </sect3>
+
+ <sect3>
+ <title>Поддержка нескольких дисков</title>
+
+ <para><application>Sysinstall</application> поддерживает установку
+ пакетов с нескольких дисков. Для это нужно, чтобы на каждом диске
+ был файл <filename>INDEX</filename>, содержащий названия всех пакетов
+ со всех дисков, с дополнительным полем, указывающем на каком диске
+ содержится данный конкретный пакет. Также, на каждом диске, в файле
+ <filename>cdrom.inf</filename> должна быть указана переменная
+ <literal>CD_VOLUME</literal> для того, чтобы sysinstall мог
+ определить какой этой диск. Когда пользователь будет пытаться
+ установить пакет, которого нет на текущем диске, sysinstall выдаст
+ запрос на вставку соответствующего диска.</para>
+ </sect3>
+ </sect2>
+ </sect1>
+
+ <!-- Распространение -->
+ <sect1 id="distribution">
+ <title>Распространение</title>
+
+ <sect2 id="dist-ftp">
+ <title>Серверы FTP</title>
+
+ <para>После того, как релиз был тщательно протестирован и подготовлен к
+ распространению, должен быть обновлён главный FTP-сервер. Все
+ официальные общедоступные серверы FTP-серверы &os; являются
+ зеркалами главного сервера, открытого только другим серверам FTP. Этот
+ сервер известен под именем <hostid>ftp-master</hostid>. Когда релиз
+ готов, на сервере <hostid>ftp-master</hostid> должны быть изменены
+ следующие строки:</para>
+
+ <variablelist>
+ <varlistentry>
+ <term><filename>/pub/FreeBSD/releases/<replaceable>arch</replaceable>/<replaceable>X.Y</replaceable>-RELEASE/</filename></term>
+
+ <listitem>
+ <para>Установочный каталог FTP, получаемый по команде <command>make
+ release</command>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>/pub/FreeBSD/ports/<replaceable>arch</replaceable>/packages-<replaceable>X.Y</replaceable>-release/</filename></term>
+
+ <listitem>
+ <para>Полный комплект построенных пакетов для этого релиза.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>/pub/FreeBSD/releases/<replaceable>arch</replaceable>/<replaceable>X.Y</replaceable>-RELEASE/tools</filename></term>
+
+ <listitem>
+ <para>Символическая ссылка на
+ <filename>../../../tools</filename>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>/pub/FreeBSD/releases/<replaceable>arch</replaceable>/<replaceable>X.Y</replaceable>-RELEASE/packages</filename></term>
+
+ <listitem>
+ <para>Символическая ссылка на
+ <filename>../../../ports/<replaceable>arch</replaceable>/packages-<replaceable>X.Y</replaceable>-release</filename>.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term><filename>/pub/FreeBSD/releases/<replaceable>arch</replaceable>/ISO-IMAGES/<replaceable>X.Y</replaceable>/<replaceable>X.Y</replaceable>-RELEASE-<replaceable>arch</replaceable>-*.iso</filename></term>
+
+ <listitem>
+ <para>ISO-образы. Здесь <quote>*</quote> это
+ <filename>disc1</filename>, <filename>disc2</filename> и так
+ далее. Только если здесь есть <filename>disc1</filename> и
+ альтернативный первый установочный CD (например, обрезанная
+ установка без оконной системы), то здесь может быть также
+ и <filename>mini</filename>.</para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+
+ <para>Для получения дополнительной информации о системе зеркальных
+ FTP-серверов &os;, пожалуйста, прочтите статью о <ulink
+ url="&url.articles.hubs;">Зеркалировании &os;</ulink>.</para>
+
+ <para>Может пройти от нескольких часов до двух дней между тем, как
+ обновится <hostid>ftp-master</hostid>, и на основной массе FTP-серверов
+ 1-го уровня появится новое программное обеспечение, в зависимости от
+ того, в тоже самое ли время пакет был загружен. Обязательно, чтобы
+ выпускающие релиз координировали свои действия с &a.mirror-announce;
+ до того, как объявлять об общедоступности нового программного
+ обеспечения с серверов FTP. В идеальном случае набор пакетов к
+ релизу должен быть загружен по крайней мере за четыре дня до момента
+ выпуска релиза. Релиз должен быть загружен в промежутке от 24 до 48
+ часов до момента выхода запланированного релиза с выключенными
+ полномочиями <quote>other</quote>. Это позволит зеркалирующим серверам
+ сгрузить его, но никто не сможет получить его с зеркальных серверов.
+ В момент выхода релиза должно быть послано сообщение в адрес
+ &a.mirror-announce;, говорящее о том, что релиз выпущен и наступило
+ время для открытия доступа на зеркальных серверах. Обязательно
+ вместе со временем укажите и часовой пояс, например, относительно
+ GMT.</para>
+ </sect2>
+
+ <sect2 id="dist-cdrom">
+ <title>Тиражирование CD-ROM</title>
+
+ <para>Вскоре появится: Советы по передаче ISO-образов &os; на
+ тиражирование и применяемые меры по контролю качества.</para>
+ </sect2>
+ </sect1>
+
+ <!-- Расширяемость -->
+ <sect1 id="extensibility">
+ <title>Расширяемость</title>
+
+ <para>Хотя &os; представляет собой законченную операционную систему,
+ ничего не заставляет вас использовать систему только в том виде, который
+ приготовлен нами для распространения. Мы попытались спроектировать
+ систему максимально расширяемой, чтобы она могла выполнять роль
+ платформы, на основе которой можно строить другие коммерческие продукты.
+ Единственным <quote>правилом</quote>, которое мы налагаем, является
+ настоятельная рекомендация документировать улучшения, вносимые вами в
+ дистрибутив &os; с нетривиальными изменениями! Сообщество &os;
+ может помогать только пользователям того программного обеспечения,
+ которое распространяем мы. Мы определённо приветствуем улучшения в
+ форме, например, инструментов установки и администрирования, но не можем
+ отвечать на вопросы о них.</para>
+
+ <sect2>
+ <title>Создание модифицированных загрузочных дискет</title>
+
+ <para>Во многих местах имеются сложные условия, которые требуют
+ размещения дополнительных модулей ядра или пользовательских
+ инструментов на установочные дискеты. <quote>Быстрым и
+ неаккуратным</quote> способом сделать это является изменение
+ промежуточного каталога в существующей иерархии при выполнении
+ <command>make release</command>:</para>
+
+ <itemizedlist>
+ <listitem>
+ <para>Примените патчи или добавьте дополнительные файлы в каталог
+ построения релиза с изменённых корнем файловой системы.</para>
+ </listitem>
+
+ <listitem>
+ <para><command>rm
+ ${CHROOTDIR}/usr/obj/usr/src/release/release.[59]</command></para>
+ </listitem>
+
+ <listitem>
+ <para>перестройте &man.sysinstall.8;, ядро и остальные части системы,
+ которые коснулись ваши изменения.</para>
+ </listitem>
+
+ <listitem>
+ <para><command>chroot ${CHROOTDIR} ./mk floppies</command></para>
+ </listitem>
+ </itemizedlist>
+
+ <para>Дискеты нового релиза будут находиться в
+ <filename>${CHROOTDIR}/R/stage/floppies</filename>.</para>
+
+ <para>Либо может быть вызвана цель
+ <filename>boot.flp</filename> построения или скрипт создания файловой
+ системы, <filename>src/release/scripts/doFS.sh</filename>, которые
+ может быть вызван напрямую.</para>
+
+ <para>Локальные патчи могут быть также приложены к построению релиза при
+ помощи задания переменной <makevar>LOCAL_PATCH</makevar> при выполнении
+ <command>make release</command>.</para>
+ </sect2>
+
+ <sect2>
+ <title>Скрипты <command>sysinstall</command></title>
+
+ <para>Инструмент установки и настройки системы &os;,
+ &man.sysinstall.8;, может работать по сценарию, полезному для
+ автоматизированной установки в больших компаниях. Эта функциональность
+ может использоваться совместно с технологией &intel; PXE[12] для
+ первоначальной установки систем из сети, или с модифицированными
+ загрузочными дискетами со скриптами sysinstall. Пример скрипта для
+ sysinstall доступен в дереве CVS в виде файла
+ <filename>src/release/sysinstall/install.cfg</filename>.</para>
+ </sect2>
+ </sect1>
+
+ <!-- Извлечённые уроки -->
+ <sect1 id="lessons-learned">
+ <title>Уроки, извлечённые из &os;&nbsp;4.4</title>
+
+ <para>Формально процесс подготовки релиза для 4.4 начался 1 августа 2001
+ года. После этой даты все без исключения изменения в ветке
+ <literal>RELENG_4</literal> &os; подтверждались &a.re;. Первый
+ предварительный релиз для архитектуры x86 был выпущен 16 августа, за
+ ним выходило ещё 4 предварительных релиза, и всё закончилось 18 августа
+ выпуском окончательного релиза. Руководитель службы безопасности очень
+ плотно занимался процессом выпуска в последнюю неделю, так как в
+ предыдущих предварительных релизах были найдены проблемы, касающиеся
+ информационной безопасности. Чуть более чем за месяц в адрес &a.re;
+ поступило более <emphasis>500</emphasis> писем.</para>
+
+ <para>Сообщество наших пользователей весьма чётко показало, что
+ безопасность и стабильность релиза &os; не должна приноситься в жертву
+ любым назначенным срокам окончания работ или планируемым датам выхода
+ релиза. Проект &os; за время своего существования значительно вырос,
+ и никогда ранее необходимость в стандартизации процедур подготовки
+ релизов не стояла так остро. Это стало ещё более важно, когда &os;
+ была перенесена на новые аппаратные платформы.</para>
+ </sect1>
+
+ <!-- Направления будущих работ -->
+ <sect1 id="future">
+ <title>Направления будущих работ</title>
+
+ <para>Нашим работам по подготовке релизов жизненно важно расти вместе с
+ увеличением количества пользователей системы. Вместе с этим мы очень
+ плотно работаем над документированием действий, выполняемых при выпуске
+ релизов &os;.</para>
+
+ <itemizedlist>
+ <listitem>
+ <para><emphasis>Параллелизм</emphasis> - некоторые этапы построения
+ релиза на самом деле выполнять параллельно
+ <quote>затруднительно</quote>. Большинство выполняемых задач весьма
+ интенсивно работают с&nbsp;I/O, так что для ускорения процесса
+ <command>make release</command> наличие нескольких высокоскоростных
+ дисков гораздо более важно, чем использование нескольких процессоров.
+ Если для различных иерархий в &man.chroot.2;-окружении используется
+ несколько дисков, то извлечение из CVS деревьев
+ <filename>ports</filename> и <filename>doc</filename> может
+ выполняться одновременно с командой <command>make world</command> на
+ другом диске. Использование <acronym>RAID</acronym>-решений
+ (аппаратных или программных) может значительно сократить общее время
+ построения.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>Кроссплатформенное построение
+ релизов</emphasis> - Построить релиз для IA-64 или Alpha на
+ x86-оборудовании? <command>make TARGET=ia64 release</command>.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>Тестирование</emphasis> - Нам нужна улучшенная
+ автоматизированная система тестирования корректности для
+ &os;.</para>
+ </listitem>
+
+ <listitem>
+ <para><emphasis>Инструменты установки</emphasis> - Наша программа
+ установки давно пережила свой век. В разработке находятся несколько
+ проектов, которые должны дать улучшенную технологию установки.
+ Одним из таких проектов был libh, целью которого было создание
+ новой интеллектуальной технологии работы с пакетами и программы
+ установки с GUI.</para>
+ </listitem>
+ </itemizedlist>
+ </sect1>
+
+ <!-- Благодарности -->
+ <sect1 id="ackno">
+ <title>Благодарности</title>
+
+ <para>Я рад поблагодарить Джордана Хаббарда (Jordan Hubbard) за то, что он
+ дал мне возможность взять под свою ответственность некоторые части
+ процесса подготовки релиза &os;&nbsp;4.4, а также за все годы его работы,
+ сделавшие &os; такой, какой она является сейчас. Конечно, релиз не
+ был бы возможен без той работы, которую проделали &a.asami;, &a.steve;,
+ &a.bmah;, &a.nik;, &a.obrien;, &a.kris;, &a.jhb; и остальные члены
+ сообщества разработчиков &os;. Я также рад выразить благодарность
+ &a.rgrimes; и &a.phk;, а также остальным, работавшим над инструментами
+ подготовки релизов в первые годы существования &os;. Эта статья была
+ также написана под впечатлением документации по подготовке релизов от
+ CSRG[13], NetBSD Project[10] и замечаний Джона Балдвина (John Baldwin)
+ по предлагаемому процессу подготовки релизов[11].</para>
+ </sect1>
+
+ <!-- Раздел ссылок / Библиография -->
+ <sect1 id="biblio">
+ <title>Справочная литература</title>
+
+ <para>[1] CVS - Concurrent Versions System
+ <ulink url="http://www.cvshome.org"></ulink></para>
+
+ <para>[2] CVSup - The CVS-Optimized General Purpose Network File
+ Distribution System <ulink
+ url="http://www.polstra.com/projects/freeware/CVSup"></ulink></para>
+
+ <para>[3] <ulink url="http://pointyhat.FreeBSD.org"></ulink></para>
+
+ <para>[4] Коллекция портов &os;
+ <ulink url="http://www.FreeBSD.org/ports"></ulink></para>
+
+ <para>[5] Коммиттеры &os; <ulink
+ url="http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/contributors/staff-committers.html">
+ </ulink></para>
+
+ <para>[6] Правление &os; <ulink
+ url="&url.base;/administration.html#t-core">
+ </ulink></para>
+
+ <para>[7] Руководство &os; <ulink
+ url="http://www.FreeBSD.org/doc/ru_RU.KOI8-R/books/handbook">
+ </ulink></para>
+
+ <para>[8] GNATS: The GNU Bug Tracking System
+ <ulink url="http://www.gnu.org/software/gnats"></ulink></para>
+
+ <para>[9] Статистика &os; PR
+ <ulink url="http://www.FreeBSD.org/prstats/index.html"></ulink></para>
+
+ <para>[10] NetBSD Developer Documentation: Release Engineering <ulink
+ url="http://www.NetBSD.org/developers/releng/index.html"></ulink></para>
+
+ <para>[11] John Baldwin's &os; Release Engineering Proposal <ulink
+ url="http://people.FreeBSD.org/~jhb/docs/releng.txt"></ulink></para>
+
+ <para>[12] PXE Jumpstart Guide <ulink
+ url="http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/pxe/index.html">
+ </ulink></para>
+
+ <para>[13] Marshall Kirk McKusick, Michael J. Karels, and Keith Bostic:
+ <ulink url="http://docs.FreeBSD.org/44doc/papers/releng.html">
+ <emphasis>The Release Engineering of 4.3BSD</emphasis></ulink></para>
+ </sect1>
+</article>