diff options
Diffstat (limited to 'ru_RU.KOI8-R/articles/releng/article.xml')
-rw-r--r-- | ru_RU.KOI8-R/articles/releng/article.xml | 1153 |
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; 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; 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; 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; 3.x STABLE</phrase> + </textobject> + </mediaobject> + + <mediaobject> + <imageobject> + <imagedata fileref="branches-releng4" align="center"/> + </imageobject> + + <textobject> + <phrase>Ветка &os; 4.x STABLE</phrase> + </textobject> + </mediaobject> + + <mediaobject> + <imageobject> + <imagedata fileref="branches-releng5" align="center"/> + </imageobject> + + <textobject> + <phrase>Ветка &os; 5.x STABLE</phrase> + </textobject> + </mediaobject> + + <mediaobject> + <imageobject> + <imagedata fileref="branches-releng6" align="center"/> + </imageobject> + + <textobject> + <phrase>Ветка &os; 6.x STABLE</phrase> + </textobject> + </mediaobject> + + <mediaobject> + <imageobject> + <imagedata fileref="branches-releng7" align="center"/> + </imageobject> + + <textobject> + <phrase>Ветка &os; 7.x STABLE</phrase> + </textobject> + </mediaobject> + + <mediaobject> + <imageobject> + <imagedata fileref="branches-releng8" align="center"/> + </imageobject> + + <textobject> + <phrase>Ветка &os; 8.x STABLE</phrase> + </textobject> + </mediaobject> + + <mediaobject> + <imageobject> + <imagedata fileref="branches-releng9" align="center"/> + </imageobject> + + <textobject> + <phrase>Ветка &os; 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; 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; 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; 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>. Большинство выполняемых задач весьма + интенсивно работают с 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; 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> |