aboutsummaryrefslogtreecommitdiff
path: root/ru_RU.KOI8-R/articles/committers-guide/article.xml
diff options
context:
space:
mode:
Diffstat (limited to 'ru_RU.KOI8-R/articles/committers-guide/article.xml')
-rw-r--r--ru_RU.KOI8-R/articles/committers-guide/article.xml3352
1 files changed, 0 insertions, 3352 deletions
diff --git a/ru_RU.KOI8-R/articles/committers-guide/article.xml b/ru_RU.KOI8-R/articles/committers-guide/article.xml
deleted file mode 100644
index cf8dfd4e81..0000000000
--- a/ru_RU.KOI8-R/articles/committers-guide/article.xml
+++ /dev/null
@@ -1,3352 +0,0 @@
-<?xml version="1.0" encoding="koi8-r"?>
-<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
- "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
-<!--
- The FreeBSD Russian Documentation Project
-
- $FreeBSDru: frdp/doc/ru_RU.KOI8-R/articles/committers-guide/article.xml,v 1.30 2007/05/09 06:08:23 gad Exp $
-
- Original revision: r30088
--->
-<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="ru">
- <info><title>Справочник коммиттера</title>
-
-
- <authorgroup>
- <author><personname><surname>The FreeBSD Documentation Project</surname></personname></author>
- <author><personname><firstname>Дмитрий</firstname><surname>Морозовский</surname></personname><contrib>Перевод на русский язык: </contrib></author>
- </authorgroup>
-
- <copyright>
- <year>1999</year>
- <year>2000</year>
- <year>2001</year>
- <year>2002</year>
- <year>2003</year>
- <year>2004</year>
- <year>2005</year>
- <year>2006</year>
- <year>2007</year>
- <holder>The FreeBSD Documentation Project</holder>
- </copyright>
-
- <legalnotice xml:id="trademarks" role="trademarks">
- &tm-attrib.freebsd;
- &tm-attrib.cvsup;
- &tm-attrib.ibm;
- &tm-attrib.intel;
- &tm-attrib.sparc;
- &tm-attrib.general;
- </legalnotice>
-
- <pubdate>$FreeBSD$</pubdate>
-
- <releaseinfo>$FreeBSD$</releaseinfo>
-
- <abstract>
- <para>Данный документ содержит информацию для сообщества коммиттеров
- FreeBSD. Все новые коммиттеры должны изучить его перед началом работы;
- прочим коммиттерам также рекомендуется время от времени просматривать
- его.</para>
- </abstract>
- </info>
-
- <sect1 xml:id="admin">
- <title>Административные детали</title>
-
- <informaltable frame="none" orient="port" pgwide="1">
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><emphasis>Хост основного репозитория</emphasis></entry>
- <entry><systemitem class="fqdomainname">ncvs.FreeBSD.org</systemitem></entry>
- </row>
-
- <row>
- <entry><emphasis>Способ авторизации</emphasis></entry>
- <entry>&man.ssh.1;, только протокол 2</entry>
- </row>
-
- <row>
- <entry><emphasis>Основной корень репозитория (CVSROOT)</emphasis></entry>
- <entry>
- <systemitem class="fqdomainname">ncvs.FreeBSD.org</systemitem><literal>:</literal><filename>/home/ncvs</filename> (см. также <xref linkend="cvs.operations"/>).
- </entry>
- </row>
-
- <row>
- <entry><emphasis>&a.cvsadm;</emphasis></entry>
- <entry>&a.peter.email; и &a.markm.email;, а также &a.joe.email; и &a.marcus.email; для
- иерархии <filename>ports/</filename></entry>
- </row>
-
- <row>
- <entry><emphasis>Списки рассылки</emphasis></entry>
- <entry>&a.doc-developers;, &a.doc-committers;;
- &a.ports-developers;, &a.ports-committers;;
- &a.src-developers;, &a.src-committers;. (Каждому репозиторию
- проекта соответствуют отдельные списки рассылки с суффиксами
- -developers и -committers. Архивы этих списков хранятся в файлах
- <filename>/home/mail/<replaceable>repository-name</replaceable>-developers-archive</filename>
- и
- <filename>/home/mail/<replaceable>repository-name</replaceable>-committers-archive</filename>
- на машинах кластера <systemitem class="fqdomainname">FreeBSD.org</systemitem>).
- </entry>
- </row>
-
-
- <row>
- <entry><emphasis>Отчеты Правления</emphasis></entry>
- <entry><filename>/home/core/public/monthly-report</filename>
- на машинах кластера <systemitem class="fqdomainname">FreeBSD.org</systemitem>.
- </entry>
- </row>
-
- <row>
- <entry><emphasis>Наиболее значимые метки CVS</emphasis></entry>
- <entry><literal>RELENG_4</literal> (ветвь 4.X-STABLE),
- <literal>RELENG_5</literal> (ветвь 5.X-STABLE),
- <literal>RELENG_6</literal> (ветвь 6.X-STABLE),
- <literal>HEAD</literal> (ветвь -CURRENT)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Для авторизации на машины проекта вы должны использовать протоколы
- &man.ssh.1; или &man.telnet.1; с включенным Kerberos 5. В случае
- &man.ssh.1;, допустим только протокол версии 2.
- Эти протоколы являются значительно более защищенными по сравнению с
- &man.telnet.1; или &man.rlogin.1;, поскольку информация об авторизации
- передается в зашифрованном виде. По умолчанию, протокол &man.ssh.1;
- также шифрует весь трафик. Учитывая наличие таких утилит, как
- &man.ssh-agent.1; и &man.scp.1;, протокол &man.ssh.1; значительно
- удобнее прочих в использовании. Если вы ничего не знаете об &man.ssh.1;,
- загляните в раздел <xref linkend="ssh.guide"/>.</para>
- </sect1>
-
- <sect1 xml:id="committer.types">
- <title>Типы коммит битов</title>
-
- <para>CVS Репозиторий FreeBSD состоит из нескольких разделов, охватывающих
- исходные тексты базовой операционной системы, документацию, инфраструктуру
- построения внешних приложений (портов), а также различные служебные
- утилиты. Право записи в репозиторий (<quote>коммит бит</quote>)
- подразумевает указание области дерева, в которое оно может быть применено.
- Как правило, области напрямую связаны с группой, подтвердившей право
- коммиттера на бит. В дальнейшем, область действия коммит бита
- может быть расширена; в этом случае, коммиттер должен следовать
- стандартным правилам нового для коммиттера в данной области, в частности,
- получая подтверждения на каждый коммит и, возможно, в течение какого-то
- времени работу с ментором.</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="3">
- <tbody>
- <row>
- <entry><emphasis>Тип коммит бита</emphasis></entry>
- <entry><emphasis>Ответственные</emphasis></entry>
- <entry><emphasis>Области репозитория</emphasis></entry>
- </row>
-
- <row>
- <entry>src</entry>
- <entry>core@</entry>
- <entry>src/ и соответствующие части doc/</entry>
- </row>
-
- <row>
- <entry>doc</entry>
- <entry>doceng@</entry>
- <entry>doc/, www/, документация дерева src/</entry>
- </row>
-
- <row>
- <entry>ports</entry>
- <entry>portmgr@</entry>
- <entry>ports/</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Биты, выделенные до разделения дерева на области могут использоваться
- во всех частях дерева. Однако, с точки зрения здравого смысла, коммиттер,
- не имеющий опыта работы в какой-либо части дерева, должен предоставлять
- предлагаемые изменения для рассмотрения другими коммиттерами, получать
- подтверждения от ответственных за различные части репозитория, а также,
- возможно, работать совместно с ментором. Поскольку правила ведения
- различных областей кода различаются, указанные нормы скорее направлены
- на благо коммиттера, не имеющего достаточного опыта работы в данной
- области.</para>
-
- <para>Вне зависимости от области приложения усилий, запросы коммиттеров
- на рассмотрение предлагаемых изменений в процессе разработки могут
- только приветствоваться.</para>
-
- <sect2>
- <title>Правила для коммиттеров документации (<filename>doc/</filename>)
- при работе с деревом исходных текстов
- (<filename>src/</filename>)</title>
-
- <itemizedlist>
- <listitem><para>Коммиттеры документации могут самостоятельно изменять
- документацию к исходным текстам, например, страницы справочника, файлы
- README, базы данных утилиты fortune, календарей, а также исправлять
- комментарии в исходных текстах без дополнительного согласования с
- коммиттерами исходных текстов, при условии сохранения здравого смысла
- и манеры коммитов.</para></listitem>
-
- <listitem><para>Коммиттеры документации могут вносить незначительные
- изменения и исправления в исходные тексты (такие как исправления к
- процессу сборки, добавление малых дополнительных возможностей и т.п.)
- при наличии одобрения от коммиттера исходных
- текстов.</para></listitem>
-
- <listitem><para>Коммиттер документации может расширить область действия
- своего бита на область исходных текстов (и стать, таким образом,
- коммиттером исходных текстов), найдя себе ментора, который предложит
- это расширение Правлению (Core). После одобрения, строка с его именем
- пользователя вносится в файл 'access', и применяются обычные правила
- периода работы с ментором, подразумевающие получение одобрения на
- каждый коммит.</para></listitem>
-
- <listitem><para>Одобрение коммита ("Approved by") может производиться
- только "полновесным" (не работающим с ментором) коммиттером исходных
- текстов; последние могут рассматривать предлагаемые изменения и
- указываться в строке "Reviewed by".</para></listitem>
- </itemizedlist>
- </sect2>
-
- </sect1>
-
- <sect1 xml:id="cvs.operations">
- <title>Работа с CVS</title>
-
- <para>Подразумевается, что вы уже имеете опыт базовой работы с CVS.</para>
-
- <para>&a.cvsadm; являются <quote>владельцами</quote> репозитория CVS и
- ответственны за все прямые его изменения (в целях чистки или исправления
- каких-либо вопиющих ошибок коммиттеров при работе с CVS). Если в
- результате ваших действий с частью репозитория произошел несчастный
- случай, например, после неверной операции <command>cvs import</command>
- или <command>cvs tag</command>, пошлите письмо соответствующей подгруппе
- &a.cvsadm; (см. следующую таблицу) и сообщите о проблеме. В наиболее
- серьезных случаях, касающихся не только какой-либо части репозитория, а
- дерева CVS в целом, вы можете написать &a.cvsadm;. Пожалуйста,
- <emphasis>не надо</emphasis> писать группе &a.cvsadm; по поводу
- репозиторного копирования и прочих вопросов, которые может решить
- соответствующая подгруппа.</para>
-
- <para><anchor xml:id="repomeisters"/>Напрямую изменять содержимое репозитория может только группа
- CVS-мастеров; для обеспечения этого, только CVS-мастера имеют учетные
- записи на машинах, поддерживающих основной репозиторий.</para>
-
- <note><para>Адреса, на которые следует посылать запросы, зависят от области
- репозитория, которую требуется поправить:</para>
-
- <itemizedlist>
- <listitem><para>ncvs@ - репозиторий <filename>
- /home/ncvs</filename>, основные исходные тексты
- </para></listitem>
-
- <listitem><para>pcvs@ - репозиторий <filename>
- /home/pcvs</filename>, порты</para></listitem>
-
- <listitem><para>dcvs@ - репозиторий <filename>
- /home/dcvs</filename>, документация</para></listitem>
-
- <listitem><para>projcvs@ - репозиторий <filename>
- /home/projcvs</filename>, прочие проекты</para></listitem>
- </itemizedlist>
- </note>
-
- <para>Дерево CVS в настоящее время разделено на четыре независимых
- репозитория: <literal>doc</literal>, <literal>ports</literal>,
- <literal>projects</literal> и <literal>src</literal>. Для удобства
- работы пользователей при распространении через
- <application>CVSup</application> различные деревья комбинируются в
- одно, с одним служебным каталогом <literal>CVSROOT</literal>.</para>
-
- <note><para>Обратите внимание, что модуль <literal>www</literal>, содержащий
- исходные тексты
- <link xlink:href="http://www.FreeBSD.org">веб-сайта FreeBSD</link>, расположен
- в репозитории <literal>doc</literal>.</para></note>
-
- <para>В настоящее время, все репозитории CVS располагаются на одной машине,
- <systemitem class="fqdomainname">ncvs.FreeBSD.org</systemitem>, однако, для обеспечения
- возможности в будущем разнести их по физически различным машинам, для
- каждой поддерживается отдельное имя хоста. Их и следует использовать
- коммиттерам. Наконец, каждый репозиторий расположен в отдельном каталоге.
- В итоге, общая картина выглядит так:</para>
-
- <table frame="none" xml:id="cvs-repositories-and-hosts">
- <title>Репозитории CVS &os;, хосты и каталоги</title>
-
- <tgroup cols="3">
- <thead>
- <row>
- <entry>Репозиторий</entry>
- <entry>Хост</entry>
- <entry>Каталог</entry>
- </row>
- </thead>
-
- <tbody>
- <row>
- <entry>doc</entry>
- <entry>dcvs.FreeBSD.org</entry>
- <entry>/home/dcvs</entry>
- </row>
-
- <row>
- <entry>ports</entry>
- <entry>pcvs.FreeBSD.org</entry>
- <entry>/home/pcvs</entry>
- </row>
-
- <row>
- <entry>projects</entry>
- <entry>projcvs.FreeBSD.org</entry>
- <entry>/home/projcvs</entry>
- </row>
-
- <row>
- <entry>src</entry>
- <entry>ncvs.FreeBSD.org</entry>
- <entry>/home/ncvs</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Операции с CVS производятся удаленно, путем установки переменной
- окружения <envar>CVSROOT</envar> (она должна указывать на соответствующий
- хост и каталог верхнего уровня, например
- <systemitem class="fqdomainname">ncvs.FreeBSD.org</systemitem><literal>:</literal><filename>/home/ncvs</filename>)
- и последующего выполнения команд выгрузки и коммита. Многие коммиттеры
- определяют команды-синонимы, разворачивающиеся в запуск
- <application>cvs</application> с правильными параметрами. В частности,
- пользователи оболочки &man.tcsh.1; могут добавить следующие строки в
- свой скрипт начальной загрузки <filename>.cshrc</filename>:</para>
-
- <programlisting>alias dcvs cvs -d <replaceable>user</replaceable>@dcvs.FreeBSD.org:/home/dcvs
-alias pcvs cvs -d <replaceable>user</replaceable>@pcvs.FreeBSD.org:/home/pcvs
-alias projcvs cvs -d <replaceable>user</replaceable>@projcvs.FreeBSD.org:/home/projcvs
-alias scvs cvs -d <replaceable>user</replaceable>@ncvs.FreeBSD.org:/home/ncvs</programlisting>
-
- <para>Теперь все операции с CVS могут выполняться на локальной машине,
- а для внесения изменений в официальное дерево CVS следует использовать
- команду <command><replaceable>X</replaceable>cvs commit</command>.
- Если вам нужно добавить в проект что-либо совершенно новое (например,
- исходные тексты сторонних разработчиков), нужно использовать команду
- <command>cvs import</command>; обратитесь к странице справочника по
- &man.cvs.1; за подробностями.</para>
-
- <note>
- <para>Пожалуйста, <emphasis>не используйте</emphasis> команды
- <command>cvs checkout</command> или
- <command>cvs update</command> для синхронизации ваших исходных текстов.
- Протокол CVS не оптимизирован для удаленной работы и требует
- значительных накладных расходов со стороны сервера. Пожалуйста,
- используйте метод синхронизации посредством <command>cvsup</command>,
- а основной хост используйте только для собственно коммитов.
- Наша распределенная сеть серверов cvsup достаточно развита. При
- необходимости синхронизации с самыми свежими изменениями вы можете
- пользоваться машиной <systemitem>cvsup-master</systemitem>, которая обладает
- достаточными ресурсами для удаленной работы с CVS; за нее отвечает
- &a.kuriyama.email;.
- </para>
- </note>
-
- <para>Если вам нужно использовать команды CVS <command>add</command> и
- <command>delete</command>, так чтобы в реальности переместить часть
- исходных текстов подобно действию команды &man.mv.1;, нужно запросить
- операцию <quote>репозиторного копирования</quote> (repository copy).
- При этом кто-либо из <link linkend="repomeisters">CVS-мастеров</link>
- скопирует необходимые файлы внутри репозитория на нужное место и даст вам
- знать об этом. Репозиторное копирование производится для сохранения
- истории (журналов изменения). Возможность отследить историю изменений
- очень ценна для всего проекта FreeBSD.</para>
-
- <para>Документация по CVS, учебные материалы и FAQ можно найти по адресу:
- <uri xlink:href="http://www.cvshome.org/docs/">http://www.cvshome.org/docs/</uri>.
- Очень полезна также книга Карла Фогеля (Karl Fogel)
- <link xlink:href="http://cvsbook.red-bean.com/cvsbook.html">Open Source
- Development with CVS</link>.
- Некоторая полезная информация о CVS на русском языке может быть найдена
- <link xlink:href="http://alexm.here.ru/cvs-ru/">здесь</link>.</para>
-
- <para>&a.des.email; написал такой <quote>мини-пример</quote> работы с CVS:</para>
-
- <orderedlist>
- <listitem>
- <para>Извлечение нужного модуля из репозитория: команда
- <command>co</command> или <command>checkout</command>.</para>
-
- <screen>&prompt.user; <userinput>cvs checkout shazam</userinput></screen>
-
- <para>Эта команда извлечет копию модуля <filename>shazam</filename>.
- Если модуль с таким именем не существует (не описан в файле modules),
- будет произведена попытка извлечь директорию верхнего уровня
- <filename>shazam</filename>.</para>
-
- <table frame="none">
- <title>Полезные опции команды <command>cvs checkout</command></title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><option>-P</option></entry>
- <entry>Не создавать (точнее, удалить после завершения
- выполнения) пустые каталоги</entry>
- </row>
-
- <row>
- <entry><option>-l</option></entry>
- <entry>Извлекать один уровень каталогов (без
- подкаталогов)</entry>
- </row>
-
- <row>
- <entry><option>-r<replaceable>rev</replaceable></option></entry>
- <entry>Извлечь ревизию, ветвь или тег
- <replaceable>rev</replaceable> для указанного модуля</entry>
- </row>
-
- <row>
- <entry><option>-D<replaceable>date</replaceable></option></entry>
- <entry>Извлечь состояние модуля в репозитории на момент
- <replaceable>date</replaceable></entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Примеры в применении к FreeBSD:</para>
-
- <itemizedlist>
- <listitem>
- <para>Извлечь модуль <filename>miscfs</filename>, расположенный в
- каталоге репозитория <filename>src/sys/miscfs</filename>:</para>
-
- <screen>&prompt.user; <userinput>cvs co miscfs</userinput></screen>
-
- <para>После выполнения вы получите каталог
- <filename>miscfs</filename>, содержащий подкаталоги
- <filename>CVS</filename>, <filename>deadfs</filename>,
- <filename>devfs</filename> и т.д. Один из них
- (<filename>linprocfs</filename>) будет пустым.</para>
- </listitem>
-
- <listitem>
- <para>Извлечь те же файлы, но с полным путем:</para>
-
- <screen>&prompt.user; <userinput>cvs co src/sys/miscfs</userinput></screen>
-
- <para>Теперь у вас есть каталог <filename>src</filename>,
- содержащий подкаталоги <filename>CVS</filename> и
- <filename>sys</filename>. Каталог <filename>src/sys</filename>
- содержит подкаталоги <filename>CVS</filename> и
- <filename>miscfs</filename> и т.д.</para>
- </listitem>
-
- <listitem>
- <para>Извлечь те же файлы, удалив при этом пустые
- подкаталоги:</para>
-
- <screen>&prompt.user; <userinput>cvs co -P miscfs</userinput></screen>
-
- <para>Вы получите каталог
- <filename>miscfs</filename> с подкаталогами
- <filename>CVS</filename>, <filename>deadfs</filename>,
- <filename>devfs</filename>... однако без подкаталога
- <filename>linprocfs</filename>, поскольку он не содержит файлов.</para>
- </listitem>
-
- <listitem>
- <para>Извлечь каталог <filename>miscfs</filename> без
- подкаталогов:</para>
-
- <screen>&prompt.user; <userinput>cvs co -l miscfs</userinput></screen>
-
- <para>Теперь в каталоге <filename>miscfs</filename> будет только
- один подкаталог <filename>CVS</filename>.</para>
- </listitem>
-
- <listitem>
- <para>Извлечь модуль <filename>miscfs</filename> из ветви
- 6.X:</para>
-
- <screen>&prompt.user; <userinput>cvs co -rRELENG_6 miscfs</userinput></screen>
-
- <para>Теперь вы можете изменить исходные тексты и произвести коммит
- в эту ветвь.</para>
- </listitem>
-
- <listitem>
- <para>Извлечь модуль <filename>miscfs</filename> по состоянию на
- момент выхода 6.0-RELEASE:</para>
-
- <screen>&prompt.user; <userinput>cvs co -rRELENG_6_0_0_RELEASE miscfs</userinput></screen>
-
- <para>В этом случае вы не сможете внести изменения в репозиторий,
- поскольку <literal>RELENG_6_0_0_RELEASE</literal> описывает
- момент времени, а не ветвь разработки.</para>
- </listitem>
-
- <listitem>
- <para>Извлечь модуль <filename>miscfs</filename> по состоянию на
- 15 января 2000 г:</para>
-
- <screen>&prompt.user; <userinput>cvs co -D'01/15/2000' miscfs</userinput></screen>
-
- <para>Как и в предыдущем случае, изменения не могут быть
- записаны.</para>
- </listitem>
-
- <listitem>
- <para>Извлечь модуль <filename>miscfs</filename>, каким он был
- неделю назад:</para>
-
- <screen>&prompt.user; <userinput>cvs co -D'last week' miscfs</userinput></screen>
-
- <para>И вновь, изменения не могут быть записаны.</para>
- </listitem>
- </itemizedlist>
-
- <para>Обратите внимание, что мета-данные хранятся в подкаталогах
- <filename>CVS</filename>.</para>
-
- <para>Аргументы опций <option>-D</option> and <option>-r</option>
- сохраняются (являются <quote>клейкими</quote>, sticky), например,
- при последующем использовании команды
- <command>cvs update</command>.</para>
- </listitem>
-
- <listitem>
- <para>Проверка состояния извлеченных файлов: команда
- <command>status</command>.</para>
-
- <screen>&prompt.user; <userinput>cvs status shazam</userinput></screen>
-
- <para>Эта команда покажет статус файла <filename>shazam</filename>
- или каждого файла в директории <filename>shazam</filename>.
- Для каждого из файлов статус может быть одним из:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <tbody>
- <row>
- <entry>Up-to-date</entry>
- <entry>Файл соответствует репозиторию и не
- модифицировался</entry>
- </row>
-
- <row>
- <entry>Needs Patch</entry>
- <entry>Файл не изменялся, но репозиторий содержит обновленную
- версию</entry>
- </row>
-
- <row>
- <entry>Locally Modified</entry>
- <entry>Файл соответствует репозиторию, но был изменен
- локально</entry>
- </row>
-
- <row>
- <entry>Needs Merge</entry>
- <entry>Файл изменен локально; вместе с тем, файл изменен и в
- репозитории</entry>
- </row>
-
- <row>
- <entry>File had conflicts on merge</entry>
- <entry>После последнего обновления возникли конфликты, и они
- все еще не устранены</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Кроме того, будут показаны локальная версия и дата модификации,
- версия и дата последней из доступных (если вы применяли
- <quote>клейкие</quote> дату, тег или ветвь, последняя доступная версия
- может отличаться от вашей), а также клейкие теги, временные метки
- и опции.</para>
- </listitem>
-
- <listitem>
- <para>Обновление извлеченного модуля: команда
- <command>update</command>.</para>
-
- <screen>&prompt.user; <userinput>cvs update shazam</userinput></screen>
-
- <para>Эта команда обновит состояние файла <filename>shazam</filename>
- или файлов в каталоге <filename>shazam</filename> до наиболее
- свежих версий выбранной вами при извлечении ветви. Если выбирался
- <quote>момент времени</quote>, не произойдет ничего, если только
- за истекшее время в репозитории не был перемещен тег или не
- произошло чего-нибудь еще непредвиденного.</para>
-
- <para>Полезные опции в дополнение к уже описанным для команды
- <command>checkout</command>:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><option>-d</option></entry>
- <entry>Извлечь вновь появившиеся или пропущенные ранее
- подкаталоги</entry>
- </row>
-
- <row>
- <entry><option>-A</option></entry>
- <entry>Обновиться до текущего состояния головной ветви</entry>
- </row>
-
- <row>
- <entry><option>-j<replaceable>rev</replaceable></option></entry>
- <entry>магическая опция (см. ниже)</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Если вы извлекали модуль с опциями <option>-r</option> или
- <option>-D</option>, выполнение команды <command>cvs update</command>
- с другими параметрами <option>-r</option> или <option>-D</option>
- или с опцией <option>-A</option> приведет к выбору новой ветви,
- ревизии или даты. Использование опции <option>-A</option>
- удаляет использованные ранее клейкие свойства; опции
- <option>-r</option> и <option>-D</option>, наоборот, фиксируют
- их.</para>
-
- <para>Теоретически использование <literal>HEAD</literal> в качестве
- аргумента опции <option>-r</option> должно дать тот же результат, что
- и указание опции <option>-A</option>, однако это верно лишь
- в теории.</para>
-
- <para>Опция <option>-d</option> полезна, если:</para>
- <itemizedlist>
- <listitem>
- <para>после извлечения вами модуля кем-либо еще в него были
- добавлены дополнительные каталоги;</para>
- </listitem>
-
- <listitem>
- <para>вы извлекали верхний уровень модуля при помощи опции
- <option>-l</option>, а в дальнейшем решили извлечь и
- подкаталоги;</para>
- </listitem>
-
- <listitem>
- <para>вы удалили какие-либо подкаталоги и теперь хотите
- вновь извлечь их.</para>
- </listitem>
- </itemizedlist>
-
- <para><emphasis>Обращайте внимание на вывод команды <command>cvs
- update</command>.</emphasis> Действие, произведенное с файлом,
- обозначается буквой перед его именем:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><literal>U</literal></entry>
- <entry>Файл был успешно обновлен.</entry>
- </row>
-
- <row>
- <entry><literal>P</literal></entry>
- <entry>Файл был успешно обновлен (произведен успешный патч
- из удаленного репозитория).</entry>
- </row>
-
- <row>
- <entry><literal>M</literal></entry>
- <entry>Файл был изменен, и при этом обновлен успешно.</entry>
- </row>
-
- <row>
- <entry><literal>C</literal></entry>
- <entry>Файл был изменен, и при объединении изменений возникли
- конфликты.</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <para>Объединение (merging) производится, если вы выгрузили рабочую
- копию какого-то модуля, изменили его, затем кто-либо еще произвел
- коммит собственных изменений, и, наконец, вы выполняете команду
- <command>cvs update</command>. CVS знает, что производились локальные
- изменения, и пытается объединить ваши изменения с теми, что произошли
- в репозитории (от состоянии версии, которую вы выгружали, до версии,
- до которой вы пытаетесь обновиться). Если изменения происходили с
- различными частями файла, объединение почти всегда произойдет успешно
- (хотя результат при этом может не быть синтаксически или семантически
- корректным).</para>
-
- <para>CVS выводит букву <literal>M</literal> перед именем всех локально
- измененных файлов, даже если у них нет новых версий в репозитории,
- так что команда <command>cvs update</command> удобна для быстрого
- получения списка файлов, которые вы изменяли.</para>
-
- <para>Если в результате вы видите букву <literal>C</literal>, ваши
- изменения конфликтуют с изменениями, внесенными в репозиторий
- (изменения были в одних и тех же или рядом расположенных строках,
- либо вы изменили файл настолько, что при сравнении
- <command>cvs</command> не смогла удержать контекст и приложить
- изменения из репозитория). Вам необходимо устранить конфликты,
- вручную редактируя файл. Конфликтующие фрагменты помечаются
- строками из знаков <literal>&lt;</literal>, <literal>=</literal> и
- <literal>&gt;</literal>. В начале каждого из конфликтов присутствует
- строка из семи знаков <literal>&lt;</literal> и имени файла, затем
- идет фрагмент, содержащий внесенные вами изменения, разделитель
- из семи знаков <literal>=</literal>, соответствующий фрагмент из
- версии файла, содержащейся в репозитории, и, наконец, строка из семи
- знаков <literal>&gt;</literal> совместно с номером версии, до которой
- вы обновляли файл.</para>
-
- <para>Опция <option>-j</option> содержит некоторое количество черной
- магии. При ее наличии локальный файл обновляется до указанной версии
- так же, как и при использовании опции <option>-r</option>, но
- отслеживаемые номер версии или ветвь не изменяются. Эта опция умеет
- смысл лишь при парном использовании: при этом делается попытка
- применить изменения между двумя указанными версиями к локальной
- копии файла.</para>
-
- <para>К примеру, вы внесли изменения и произвели коммит в файл
- <filename>shazam/shazam.c</filename> в &os.current;, а позднее
- хотите перенести обновления в &os.stable; (Merge-From-Current, MFC).
- Версия, которая требует переноса&nbsp;&mdash; 1.15:</para>
-
- <itemizedlist>
- <listitem>
- <para>Извлеките текущую версию модуля <filename>shazam</filename>
- для ветви &os.stable;:</para>
-
- <screen>&prompt.user; <userinput>cvs co -rRELENG_6 shazam</userinput></screen>
- </listitem>
-
- <listitem>
- <para>Приложите изменения между версиями 1.14 и 1.15:</para>
-
- <screen>&prompt.user; <userinput>cvs update -j1.14 -j1.15 shazam/shazam.c</userinput></screen>
- </listitem>
- </itemizedlist>
-
- <para>Почти наверняка вы получите конфликт в строках, содержащих
- идентификатор файла (<literal>$Id: article.xml,v 1.19 2007-05-09 06:08:50 bvs Exp $</literal> или, в случае FreeBSD,
- <literal>$FreeBSD$</literal>).
- Вам потребуется отредактировать файл для устранения конфликта
- (в данном случае достаточно убрать строки-разделители и вторую строку
- <literal>$Id: article.xml,v 1.19 2007-05-09 06:08:50 bvs Exp $</literal>, оставив лишь строку с <literal>$Id: article.xml,v 1.19 2007-05-09 06:08:50 bvs Exp $</literal>
- для &os.stable;).</para>
- </listitem>
-
- <listitem>
- <para>Просмотр изменение между локальной версией и версией из
- репозитория: команда <command>diff</command>.</para>
-
- <screen>&prompt.user; <userinput>cvs diff shazam</userinput></screen>
-
- <para>Эта команда покажет все отличия локального состояния файла (или
- файлов модуля) <filename>shazam</filename> от состояния, сохраненного
- в репозитории.</para>
-
- <table frame="none">
- <title>Полезные опции команды <command>cvs diff</command></title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><option>-u</option></entry>
- <entry>Использовать унифицированный (unified) формат.</entry>
- </row>
-
- <row>
- <entry><option>-c</option></entry>
- <entry>Использовать контекстный (context) формат.</entry>
- </row>
-
- <row>
- <entry><option>-N</option></entry>
- <entry>Показывать отсутствующие или созданные файлы.</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Всегда имеет смысл пользоваться опцией <option>-u</option>,
- поскольку унифицированный формат гораздо удобнее и лучше читаем,
- чем почти все другие (в некоторых случаях контекстный формат,
- генерируемый опцией <option>-c</option> может быть несколько лучше,
- но он гораздо более громоздок). Унифицированный формат различий
- состоит из серии фрагментов, каждый из которых начинается со строки,
- состоящей из двух символов <literal>@</literal> и номеров строк,
- описывающих положение изменившегося участка. Затем следует группа
- строк: те, что начинаются с пробела, описывают контекст, начинающиеся
- с символа <literal>-</literal> определяют удаленные строки, наконец,
- начинающиеся с символа <literal>+</literal>&nbsp;&mdash;
- добавленные.</para>
-
- <para>Вы можете сравнивать текущее состояние с версией, отличающейся
- от той, с которой вы извлекали файл, указав опцию <option>-r</option>
- или <option>-D</option> подобно командам <command>checkout</command>
- и <command>update</command>, или даже получить список изменений между
- любыми двумя версиями (вне зависимости от того, что лежит в вашей
- локальной копии), указав <emphasis>две</emphasis> версии при помощи
- опций <option>-r</option> или <option>-D</option>.</para>
- </listitem>
-
- <listitem>
- <para>Просмотр журнала изменений: команда <command>log</command>.</para>
-
- <screen>&prompt.user; <userinput>cvs log shazam</userinput></screen>
-
- <para>Если <filename>shazam</filename> является обычным файлом, эта
- команда выдаст на экран <emphasis>заголовок</emphasis> с информацией
- о файле, в частности, его местоположении в репозитории, какая версия
- соответствует текущему состоянию (<literal>HEAD</literal>), в каких
- ветвях разработки файл присутствует, а также перечислит теги, которыми
- он помечен. Затем, для каждой версии файла выводится соответствующее
- ей журнальное сообщение, включающее дату, время и автора коммита,
- количество добавленных и удаленных строк и собственно журнального
- сообщения, написанного коммиттером.</para>
-
- <para>Если <filename>shazam</filename> является каталогом, вышеописанная
- процедура выполняется для каждого файла в каталоге. Если при этом
- команде <command>log</command> не был указан флаг <option>-l</option>,
- процедура рекурсивно повторяется для всех подкаталогов.</para>
-
- <para>Команда <command>log</command> используется для просмотра истории
- одного или нескольких файлов в том виде, как она сохранена в
- репозитории CVS. Используя опцию
- <option>-r<replaceable>rev</replaceable></option>, вы можете
- посмотреть журнальное сообщение к одной определенной версии:</para>
-
- <screen>&prompt.user; <userinput>cvs log -r1.2 shazam</userinput></screen>
-
- <para>Эта команда покажет журнальное сообщение для версии
- <literal>1.2</literal> файла <filename>shazam</filename> (или для
- версий <literal>1.2</literal> каждого из файлов в каталоге
- <filename>shazam</filename>).</para>
- </listitem>
-
- <listitem>
- <para>Кто что делал: команда <command>annotate</command>.
- Эта команда показывает перед каждой строкой указанного файла (файлов)
- имя пользователя, вносившего последние изменения в эту строку.</para>
-
- <screen>&prompt.user; <userinput>cvs annotate shazam</userinput></screen>
- </listitem>
-
- <listitem>
- <para>Добавление новых файлов: команда <command>add</command>.</para>
-
- <para>Создайте файл, выполните для него команду
- <command>cvs add</command>, затем произведите запись в репозиторий
- (коммит): <command>cvs commit</command>.</para>
-
- <para>Точно так же, новые каталоги добавляются в репозиторий путем
- создания и последующего выполнения команды <command>cvs add</command>.
- Заметьте, что выполнять коммит после добавления каталога не
- надо.</para>
- </listitem>
-
- <listitem>
- <para>Удаление устаревших файлов: команда
- <command>remove</command>.</para>
-
- <para>Удалите файл, затем выполните команду <command>cvs rm</command>
- с его именем в качестве параметра, наконец, выполните для него
- <command>cvs commit</command>.</para>
- </listitem>
-
- <listitem>
- <para>Внесение изменений в репозиторий: команда
- <command>commit</command> или <command>checkin</command>.</para>
-
- <table frame="none">
- <title>Useful <command>cvs commit</command> options</title>
-
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><option>-f</option></entry>
- <entry>Форсировать внесение изменений для не модифицированного
- файла.</entry>
- </row>
-
- <row>
- <entry><option>-m<replaceable>msg</replaceable></option></entry>
- <entry>Указать сообщение для журнала в командной строке (не
- запускать текстовый редактор).</entry>
- </row>
- </tbody>
- </tgroup>
- </table>
-
- <para>Опцию <option>-f</option> следует использовать, если вы поняли,
- что забыли указать какую-либо важную информацию в журнале
- изменений.</para>
-
- <para>Хорошие журнальные сообщения очень важны. Они дают возможность
- другим узнать, зачем вы производили изменения, причем не только в
- момент их произведения, но и месяцы или годы спустя, когда кто-либо
- заинтересуется, почему выглядящий нелогично или неэффективно фрагмент
- кода попал в каши исходные тексты. Кроме того, это очень помогает
- в оценке того, нужно ли переносить соответствующий код в &os.stable;
- (MFC).</para>
-
- <para>Сообщения должны быть ясными, краткими, четкими, и представлять
- из себя разумную аннотацию, какие изменения были произведены и
- почему.</para>
-
- <para>Сообщения должны достаточно ясно показывать сторонним
- разработчикам, насколько их касаются изменения и нужно ли
- им исследовать изменения подробно.</para>
-
- <para>Избегайте внесения нескольких не связанных друг с другом
- изменений за один раз. Это затрудняет объединение изменений,
- а также, при обнаружении ошибок, усложняет поиск ответственного
- за ошибки участка.</para>
-
- <para>Избегайте смешивания в одном коммите изменений функциональности
- со стилистическими правками или исправлениями в пробелах.
- Это усложняет объединение, и, кроме того, затрудняет понимание того,
- какие именно функциональные изменения были внесены. В случае коммита
- в файлы документации, это затруднит работу групп поддержки перевода,
- поскольку становится сложнее отделить изменения, требующие
- перевода.</para>
-
- <para>Избегайте коммита большой группы файлов за один раз с одним
- общим и невнятным сообщением. Напротив, вносите изменения в отдельные
- файлы (или небольшие группы связанных файлов) с адекватными
- сообщениями для журналирования.</para>
-
- <para>Перед коммитом, <emphasis>обязательно</emphasis>:</para>
-
- <itemizedlist>
- <listitem>
- <para>проверьте, что вы будете выполнять коммит в правильную ветвь,
- посредством команды <command>cvs status</command>.</para>
- </listitem>
-
- <listitem>
- <para>проверьте ваши изменения при помощи команды
- <command>cvs diff</command></para>
- </listitem>
- </itemizedlist>
-
- <para>Кроме того, ВСЕГДА указывайте, в какие именно файлы вы вносите
- изменения, так чтобы не включить в этот список лишних файлов.
- Команда <command>cvs commit</command> без аргументов включит
- все измененные файлы в текущем каталоге и всех подкаталогах.
- </para>
- </listitem>
- </orderedlist>
-
- <para>Еще несколько полезных советов:</para>
-
- <orderedlist>
- <listitem>
-
- <para>Часто используемые опции можно занести в файл
- <filename>~/.cvsrc</filename>, например:</para>
-
- <programlisting>cvs -z3
-diff -Nu
-update -Pd
-checkout -P</programlisting>
-
- <para>Для данного случая:</para>
-
- <itemizedlist>
- <listitem>
- <para>всегда использовать компрессию уровня 3 для связи с удаленным
- сервером CVS. В случае медленного соединения это избавит вас от
- лишней головной боли.</para>
- </listitem>
-
- <listitem>
- <para>всегда использовать опции <option>-N</option> (показывать
- добавленные или удаленные файлы) и <option>-u</option>
- (унифицированный формат) для &man.diff.1;.</para>
- </listitem>
-
- <listitem>
- <para>всегда использовать опции <option>-P</option> (удалять пустые
- каталоги) и <option>-d</option> (добавлять новые каталоги)
- при обновлении.</para>
- </listitem>
-
- <listitem>
- <para>всегда использовать опцию <option>-P</option> (удалять пустые
- каталоги) при извлечении файлов и модулей.</para>
- </listitem>
- </itemizedlist>
- </listitem>
-
- <listitem>
- <para>Пользуйтесь скриптом Эйвинда Эклунда (Eivind Eklund)
- <command>cdiff</command> для просмотра изменению унифицированного
- формата. Он является оберткой для &man.less.1;, добавляющей
- цветовые коды ANSI для выделения заголовком, добавленных и удаленных
- строк; прочие строки не модифицируются. Помимо этого, скрипт
- корректно разворачивает табуляции (которые часто выглядят неправильно
- в изменениях из-за дополнительного символа в начале строки).</para>
-
- <para><package>textproc/cdiff</package></para>
-
- <para>Просто используйте его вместо &man.more.1; или &man.less.1;:</para>
-
- <screen>&prompt.user; <userinput>cvs diff -Nu shazam | cdiff</userinput></screen>
-
- <para>Помимо этого, некоторые текстовые редакторы, такие как &man.vim.1;
- (<package>editors/vim</package>) поддерживают
- цветовую синтаксическую разметку многих типов файлов, в том числе
- файлов изменений и журналов CVS/RCS.</para>
-
- <screen>&prompt.user; <userinput>echo "syn on" &gt;&gt; ~/.vimrc </userinput>
-&prompt.user; <userinput>cvs diff -Nu shazam | vim -</userinput>
-&prompt.user; <userinput>cvs log shazam | vim -</userinput> </screen>
- </listitem>
-
- <listitem>
- <para>CVS&nbsp;&mdash; старая, загадочная и порой слабо предсказуемая
- в своем поведении программа. <!-- XXX
- exhibits non-deterministic behavior which some claim as proof
- that it is actually merely the Newtonian manifestation of a
- sentient transdimensional entity. -->
- Ни один человек не способен удержать в голове все тонкости ее работы,
- так что не бойтесь спрашивать совета у Искусственного Интеллекта
- (а именно &a.cvsadm;).</para>
- </listitem>
-
- <listitem>
- <para>Не оставляйте компьютер в процессе работы команды
- <command>cvs commit</command> (в редакторе при написании журнального
- сообщения) слишком надолго (более чем на 2&ndash;3 минуты). Эта
- команда блокирует каталог репозитория, в котором она запущена, и не
- позволяет другим разработчикам изменять его содержимое. Если вам
- нужно написать длинное журнальное сообщение, подготовьте его заранее
- и вставьте в редакторе во время выполнения команды
- <command>cvs commit</command>, либо запишите его в файл и используйте
- опцию CVS <option>-F</option>:</para>
-
- <screen>&prompt.user; <userinput>vi logmsg</userinput>
-&prompt.user; <userinput>cvs ci -F logmsg shazam</userinput></screen>
-
- <para>Это самый быстрый способ передать журнальное сообщение CVS;
- однако, вы должны быть внимательны при редактировании файла
- <filename>logmsg</filename>, поскольку при выполнении коммита
- у вас не будет шансов его поправить.</para>
- </listitem>
-
- <listitem>
- <para>Вы можете существенно ускорить скорость работы CVS с центральным
- репозиторием, используя постоянное соединение с репозиторием.
- Для этого добавьте в файл <filename>~/.ssh/config</filename> строки
- </para>
-
- <programlisting>Host ncvs.FreeBSD.org
- ControlPath /home/<replaceable>user</replaceable>/.ssh/cvs.cpath
-Host dcvs.FreeBSD.org
- ControlPath /home/<replaceable>user</replaceable>/.ssh/cvs.cpath
-Host projcvs.FreeBSD.org
- ControlPath /home/<replaceable>user</replaceable>/.ssh/cvs.cpath
-Host pcvs.FreeBSD.org
- ControlPath /home/<replaceable>user</replaceable>/.ssh/cvs.cpath</programlisting>
-
- <para>Затем откройте постоянное соединение с машиной repoman:</para>
-
- <screen>&prompt.user; <userinput>ssh -fNM ncvs.FreeBSD.org</userinput></screen>
-
- <para>Теперь команды CVS должны выполняться быстрее, поскольку
- используют существующее соединение с репозиторием. Учтите, что
- регистр в именах хостов имеет значение.</para>
-
- </listitem>
-
- </orderedlist>
-
- </sect1>
-
- <sect1 xml:id="conventions">
- <title>Соглашения и традиции</title>
-
- <para>Став коммиттером, вы должны прежде всего произвести некоторые
- стандартные действия.</para>
-
- <itemizedlist>
- <listitem>
- <para>Добавьте себя в список <quote>SGML сущностей</quote> авторов
- в файл
- <filename>doc/en_US.ISO8859-1/share/xml/authors.ent</filename>;
- это изменение должно быть сделано прежде прочих, поскольку в
- противном случае следующий ваш коммит неизбежно разрушит
- процесс построения дерева doc/.</para>
-
- <para>Это довольно простая задача, но при этом она является неплохим
- первым тестом ваших навыков работы с CVS.</para>
- </listitem>
-
- <listitem>
- <para>Также добавьте свою <quote>SGML сущность</quote> в
- <filename>www/en/developers.xml</filename>.</para>
- </listitem>
-
- <listitem>
- <para>Добавьте себя в раздел <quote>Разработчики</quote> статьи
- <link xlink:href="&url.articles.contributors;/index.html">Участники проекта
- FreeBSD</link>
- (<filename>doc/en_US.ISO8859-1/articles/contributors/contrib.committers.xml</filename>)
- и удалите свою запись из раздела <quote>Прочие участники</quote>
- (<filename>doc/en_US.ISO8859-1/articles/contributors/contrib.additional.xml</filename>).</para>
- </listitem>
-
- <listitem>
- <para>Добавьте новость о новом коммиттере в файл
- <filename>www/share/xml/news.xml</filename>. Используйте существующие
- записи вида <quote>Новый коммиттер</quote> как шаблон.</para>
- </listitem>
-
- <listitem>
- <para>Вам нужно добавить ваш PGP или GnuPG ключ в каталог
- <filename>doc/share/pgpkeys</filename> (а если у вас нет ключа,
- вам нужно его создать). Не забудьте изменить и произвести коммит
- в файл <filename>doc/share/pgpkeys/pgpkeys.ent</filename>.</para>
-
- <para>&a.des.email; написал скрипт для упрощения этого процесса.
- Дополнительную информацию можно прочесть в файле <link xlink:href="http://cvsweb.FreeBSD.org/doc/share/pgpkeys/README">README</link>.</para>
-
- <note>
- <para>Очень важно, чтобы в Руководстве пользователя был записан
- актуальный PGP/GnuPG ключ, поскольку он может потребоваться
- для идентификации коммиттера (например, его будет проверять группа
- &a.admins; для аварийного восстановления учетной записи). Полный
- набор актуальных ключей пользователей домена <systemitem class="fqdomainname">FreeBSD.org</systemitem> можно найти по адресу <link xlink:href="&url.base;/doc/pgpkeyring.txt">http://www.FreeBSD.org/doc/pgpkeyring.txt</link>.</para>
- </note>
- </listitem>
-
- <listitem>
- <para>Добавьте себя в файл <filename>src/share/misc/committers-<replaceable>репозиторий</replaceable>.dot</filename>,
- где репозиторием будет являться либо doc, либо ports, либо src в зависимости от полученных вами коммиттерских
- привилегий.</para>
- </listitem>
-
- <listitem>
- <para>Некоторые коммиттеры добавляют информацию о своем местоположении
- в файл
- <filename>ports/astro/xearth/files/freebsd.committers.markers</filename>.</para>
- </listitem>
-
- <listitem>
- <para>Некоторые добавляют данные о дне своего рождения в файл
- <filename>src/usr.bin/calendar/calendars/calendar.freebsd</filename>.</para>
- </listitem>
-
- <listitem>
- <para>Представьтесь другим коммиттерам, иначе никто не будет знать,
- кто вы и чем занимаетесь. От вас не требуется писать подробное
- резюме или биографию: будут достаточны один-два абзаца о себе и
- областях FreeBSD, в которых вы планируете работать. Пошлите это
- письмо в &a.developers;&nbsp;&mdash; и все!</para>
- </listitem>
-
- <listitem>
- <para>Зайдите на машину <systemitem>hub.FreeBSD.org</systemitem> и создайте
- файл <filename>/var/forward/<replaceable>user</replaceable></filename>
- (замените <replaceable>user</replaceable> на ваше имя пользователя).
- Этот файл должен содержать адрес электронной почты, на который
- будет переправляться вся почта на адрес
- <replaceable>yourusername</replaceable>@FreeBSD.org, в том числе
- сообщения о коммитах и другая почта на адреса &a.committers; и
- &a.developers;. Слишком большие почтовые ящики на машине
- <systemitem>hub</systemitem> могут быть <quote>нечаянно</quote> удалены
- или обрезаны без предупреждения, так что, чтобы не потерять почту,
- регулярно читайте ее либо перенаправьте куда-нибудь еще.</para>
-
- <para>Из-за ощутимой загрузки, возникающей на серверах, обрабатывающих
- списки рассылки, из-за большого количества незапрошенной почты
- (спама), сервер, принимающий почту для домена FreeBSD.org,
- производит некоторые основные проверки и на основании их отвергает
- некоторые письма. На настоящий момент единственным проверяемым
- параметром является корректность информации DNS для хоста,
- доставляющего почту, но в будущем список может вырасти. Эти
- проверки временами обвиняют в том, что они отвергают правильную
- почту. Если вы хотите отключить проверки для своего адреса,
- создайте файл <filename>~/.spam_lover</filename> в своей
- домашней директории на машине
- <systemitem class="fqdomainname">freefall.FreeBSD.org</systemitem>.</para>
- </listitem>
-
- <listitem>
- <para>Если вы были подписаны на &a.cvsall;, вам, скорее всего,
- следует отписаться от него, чтобы не получать дубликатов
- каждого сообщения о коммитах.</para>
- </listitem>
- </itemizedlist>
-
- <para>Все новые коммиттеры первоначально работают под руководством
- ментора. Ваш ментор отвечает за обучение вас правилам и соглашениям,
- принятым в проекте, и помогает вам сделать первые шаги в среде
- коммиттеров. Он(а) также персонально отвечает за ваши действия
- в этот начальный период. До тех пор, пока ваш ментор не решит
- (и не анонсирует это посредством форсированного коммита файла
- <filename>access</filename>), что вы достаточно освоились и готовы
- работать самостоятельно, перед любым коммитом вы должны получить
- одобрение (approval) ментора и указать это в журнальном сообщении
- коммита строкой <literal>Approved by:</literal>.</para>
-
- <para>Все коммиты в дерево <filename>src</filename> сначала должны
- производиться в ветвь &os.current; и лишь затем интегрироваться
- в &os.stable;. Никакие серьезные изменения, новые возможности
- или рискованные модификации не должны производиться напрямую
- в ветви &os.stable;.</para>
- </sect1>
-
- <sect1 xml:id="pref-license">
- <title>Предпочтительная лицензия для новых файлов</title>
-
- <para>В настоящее время Проект &os; считает предпочтительной формой
- лицензии на исходные тексты следующий текст:</para>
-
-<programlisting>/*-
-* Copyright (c) [year] [your name]
-* All rights reserved.
-*
-* Redistribution and use in source and binary forms, with or without
-* modification, are permitted provided that the following conditions
-* are met:
-* 1. Redistributions of source code must retain the above copyright
-* notice, this list of conditions and the following disclaimer.
-* 2. Redistributions in binary form must reproduce the above copyright
-* notice, this list of conditions and the following disclaimer in the
-* documentation and/or other materials provided with the distribution.
-*
-* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
-* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
-* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-* SUCH DAMAGE.
-*
-* [id for your version control system, if any]
-*/</programlisting>
-
-<!-- XXX дать перевод *вместе* с оригинальным английским текстом -->
-
- <para>Проект &os; крайне не рекомендует так называемый <quote>третий
- пункт</quote>, или <quote>пункт о рекламе</quote> в лицензии на новый
- исходный код. В связи с большим количеством участников проекта &os;,
- выполнение этого пункта большинством коммерческих производителей все
- более затруднительно. Если ваш код в дереве исходников содержит
- <quote>пункт о рекламе</quote>, рассмотрите возможность его удаления.
- На самом деле, рассмотрите возможность перехода на приведенную
- лицензию.</para>
-
- <para>Проект &os; не рекомендует использование полностью новых лицензий
- или вариаций стандартных лицензий. Новые лицензии перед использованием
- в репозитории проекта требуют утверждения группой
- <email>core@FreeBSD.org</email>. Большое число различных лицензий
- затрудняет использование кода, в основном из-за ненамеренных
- неверных выводов из плохо сформулированных формулировок лицензии.</para>
-
- <para>Политика проекта требует, чтобы код под НЕ-BSD лицензиями располaгался
- только в определённых местах репозитория, а в некоторых случаях компиляция
- должна быть условной по умолчанию или вообще отключена. К примеру, ядро
- GENERIC должно состоять только из лицензий идентичных или в значительной степени
- схожих с BSD лицензией. Программное обеспечение под лицензиями GPL, APSL, CDDL
- и др. не должно включаться в состав GENERIC.</para>
-
- <para>Разработчикам напоминается, что в open source правильное понимание "open"
- также важно, как правильное понимание "source", ибо некорректное использование
- интеллектуальной собственности имеет серьезные последствия. Какие-либо вопросы
- или беспокойства на этот счёт должны быть немедленно вынесены на обсуждение
- главной команде разработчиков (core team).</para>
-
- </sect1>
-
- <sect1 xml:id="developer.relations">
- <title>Взаимодействие между разработчиками</title>
-
- <para>Если вы работаете над собственным исходным кодом, либо в области,
- в которой вы уже определены как ответственная персона, вам, скорее всего,
- не потребуется согласовывать коммит с кем-либо еще из разработчиков.
- Те же правила действуют, если вы нашли ошибку в той части системы,
- которой явно давно никто не занимается (к нашему стыду, существует
- несколько таких областей). Если же вы собираетесь модифицировать
- что-либо активно поддерживаемое (по-хорошему, узнать это можно только
- исследуя архивы списка рассылки <literal>cvs-committers</literal>),
- стоит послать предполагаемый патч ответственному за этот участок кода,
- как вы бы поступали, пока не были коммиттером. В случае портов нужно
- обращаться по адресу, указанному в строке <varname>MAINTAINER</varname>
- в файле <filename>Makefile</filename>. Для других частей репозитория,
- в случае если вам не очевидно, кто ведет данный участок кода, может
- помочь исследование вывода команды <command>cvs log</command>.
- &a.fenner.email; написал отличный скрипт для определения разработчиков,
- наиболее активно производивших коммиты, выводящий для каждого из
- указанных файлов имя пользователя вместе с количеством произведенных
- им коммитов в данный файл. Скрипт можно найти на машине
- <systemitem>freefall</systemitem> в файле <filename>~fenner/bin/whodid</filename>.
- Если найденная вами персона не отвечает на ваши вопросы или иным образом
- демонстрирует отсутствие интереса к проблеме, смело производите коммит
- самостоятельно.</para>
-
- <para>Если вы по каким-либо причинам не уверены в своих изменениях,
- предложите их для оценки в списке рассылки <literal>-hackers</literal>
- перед коммитом. Будет лучше, если вас обругают там и тогда, чем
- когда предлагаемое изменение уже будет частью репозитория. Если
- случилось так, что ваш коммит встретил сопротивление, возможно,
- стоит его откатить (back out) до тех пор, пока не будет достигнут
- консенсус. Помните&nbsp;&mdash; с помощью CVS всегда можно вернуться
- к предыдущему состоянию.</para>
-
- <para>Не принимайте в штыки мнения других разработчиков, с которыми вы не
- согласны. Если они предлагают иное решение проблемы чем вы, или даже
- иначе воспринимают проблему, это не значит, что они глупы, имеют
- сомнительное происхождение, хотят разрушить вашу работу, очернить
- ваше доброе имя, или развалить проект FreeBSD. Просто они смотрят на
- мир под иным углом. Различные взгляды&nbsp;&mdash; благо.</para>
-
- <para>Будьте честны в спорах. Оценивайте свою позицию по заслугам, честно
- относитесь к ее слабым сторонам и будьте готовы принять другие точки
- зрения и пути решения. Будьте открыты.</para>
-
- <para>Будьте терпимы, если вас поправляют. Все мы совершаем ошибки.
- Если вы ошиблись, извинитесь. Не обвиняйте ни себя, ни, тем более,
- других в ошибке. Не теряйте времени на смущение или упреки, просто
- исправьте ошибку и двигайтесь дальше.</para>
-
- <para>Спрашивайте и просите о помощи. Предлагайте ваши изменения для
- рассмотрения коллегам и рассматривайте их изменения. Одним из
- преимуществ программного обеспечения с открытыми исходными текстами
- является открытость разработки. Если никто не будет исследовать
- чужой код, это преимущество исчезнет.</para>
-
- </sect1>
-
- <sect1 xml:id="gnats">
- <title>GNATS</title>
-
- <para>Для отслеживания ошибок и запросов на изменения проект FreeBSD
- использует <application>GNATS</application>. Если вы исправили ошибку
- или внесли изменения, описанные в одном из сообщений об ошибках (PR),
- не забудьте закрыть это сообщение, используя команду
- <command>edit-pr <replaceable>pr-number</replaceable></command> на машине
- <systemitem>freefall</systemitem>. Хорошо будет, если вы потратите немного
- времени на поиск и закрытие других PR по этой теме. Вы и сами можете
- пользоваться &man.send-pr.1; для предложения изменений, которые, по
- вашему мнению, могут потребовать более подробного обсуждения с
- коллегами.</para>
-
- <para>Более подробно о <application>GNATS</application> можно прочитать
- по адресам:</para>
-
- <itemizedlist>
- <listitem>
- <para><uri xlink:href="http://www.cs.utah.edu/csinfo/texinfo/gnats/gnats.html">http://www.cs.utah.edu/csinfo/texinfo/gnats/gnats.html</uri></para>
- </listitem>
-
- <listitem>
- <para><link xlink:href="&url.base;/support.html">http://www.FreeBSD.org/support.html</link></para>
- </listitem>
-
- <listitem>
- <para>&man.send-pr.1;</para>
- </listitem>
- </itemizedlist>
-
- <para>Вы можете пользоваться локальной копией GNATS, поддерживая ее
- синхронность при помощи CVSup. При этом вы можете использовать
- команды GNATS локально, а также пользоваться другими интерфейсами,
- такими как <command>tkgnats</command>, что позволит вам работать с
- базой сообщений об ошибках без соединения с Интернет.</para>
-
- <procedure>
- <title>Использование локальной копии GNATS</title>
-
- <step>
- <para>Если вы еще не поддерживаете зеркало дерева GNATS, добавьте в ваш
- <filename>supfile</filename> строку</para>
-
- <programlisting>gnats release=current prefix=/usr</programlisting>
-
- <para>Учтите, что эта строка должна предшествовать любым строкам,
- содержащим параметр <quote>tag=</quote>, поскольку дерево GNATS не
- находится под управлением CVS и не имеет символьных меток.</para>
-
- <para>После запуска cvsup в каталоге <filename>/usr/gnats</filename>
- будет создана копия дерева GNATS FreeBSD. Вы можете использовать
- файл <emphasis>refuse</emphasis> для копирования отдельных категорий.
- Например, если вас интересуют только сообщения категории
- <literal>docs</literal>, добавьте в файл
- <filename>/usr/local/etc/cvsup/sup/refuse</filename><footnote>
- <para>Точный путь к файлу зависит от установок <literal>*default
- base</literal> в вашем файле
- <filename>supfile</filename>.</para>
- </footnote> строку</para>
-
- <programlisting>gnats/[a-ce-z]*</programlisting>
-
- <para>Прочие примеры в этом разделе подразумевают, что вы
- синхронизируете только категорию <literal>docs</literal>.</para>
- </step>
-
- <step>
- <para>Установите порт GNATS из
- <filename>ports/databases/gnats</filename>. После установки вы
- обнаружите различные служебные каталоги в дереве
- <filename>$PREFIX/share/gnats</filename>.</para>
- </step>
-
- <step>
- <para>Создайте символьные ссылки на синхронизированные каталоги GNATS
- в служебный каталог GNATS:</para>
-
- <screen>&prompt.root; <userinput>cd /usr/local/share/gnats/gnats-db</userinput>
-&prompt.root; <userinput>ln -s /usr/gnats/docs</userinput></screen>
-
- <para>Проделайте эту операцию для всех синхронизируемых категорий.</para>
- </step>
-
- <step>
- <para>Обновите служебный файл GNATS <filename>categories</filename>,
- расположенный в каталоге
- <filename>$PREFIX/share/gnats/gnats-db/gnats-adm</filename>:</para>
-
- <programlisting># This category is mandatory
-pending:Category for faulty PRs:gnats-admin:
-#
-# FreeBSD categories
-#
-docs:Documentation Bug:freebsd-doc:</programlisting>
- </step>
-
- <step>
- <para>Запустите <filename>$PREFIX/libexec/gnats/gen-index</filename>
- для создания индекса. Вывод этой команды должен быть перенаправлен
- в файл
- <filename>$PREFIX/share/gnats/gnats-db/gnats-adm/index</filename>.
- Эту операцию можно выполнять периодически при помощи &man.cron.8;
- или запускать &man.cvsup.1; из скрипта, который затем сгенерирует
- новый индекс:</para>
-
- <screen>&prompt.root; <userinput>/usr/local/libexec/gnats/gen-index \
- &gt; /usr/local/share/gnats/gnats-db/gnats-adm/index</userinput></screen>
- </step>
-
- <step>
- <para>Протестируйте созданную конфигурацию запросом к базе данных
- GNATS. Следующая команда выведет список открытых сообщений об
- ошибках в категории <literal>docs</literal>:</para>
-
- <screen>&prompt.root; <userinput>query-pr -c docs -s open</userinput></screen>
-
- <para>Другие интерфейсы, например, порт
- <package>databases/tkgnats</package> также должны
- работать.</para>
- </step>
-
- <step>
- <para>Выберите PR и закройте его.</para>
- </step>
- </procedure>
-
- <note>
- <para>Описанная процедура позволяет вам выбирать и просматривать
- сообщения об ошибках локально. Для редактирования или закрытия вам
- потребуется зайти на машину <systemitem>freefall</systemitem>.</para>
- </note>
- </sect1>
-
- <sect1 xml:id="people">
- <title>Кто есть кто</title>
-
- <para>Помимо мастеров репозитория, существует еще несколько участников и
- групп проекта FreeBSD, с которыми вам как коммиттеру может потребоваться
- общаться. Краткий и ни в коем случае не полный список приводится ниже.
- </para>
-
- <variablelist>
-
- <varlistentry>
- <term>&a.jhb.email;</term>
-
- <listitem>
- <para>Джон возглавляет проект SMPng и отвечает за архитектуру,
- дизайн и реализацию перехода на многонитевое ядро. Джон также
- является редактором статьи "Архитектура SMPng". Если вы работаете
- с тонкими блокировками многопроцессорного ядра, координируйте свою
- работу с Джоном.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.doceng;</term>
-
- <listitem>
- <para>doceng&nbsp;&mdash; группа, отвечающая за инфраструктуру
- построения документации, прием новых коммиттеров документации и
- актуальность информации относительно CVS на веб-сайте и FTP-сайте
- FreeBSD. Эта группа не разбирает конфликты. Большая часть
- обсуждений, связанных с документацией, происходит в &a.doc;.
- Дополнительную информацию о деятельности группы можно найти в ее
- <link xlink:href="http://www.FreeBSD.org/internal/doceng.html">собственном
- документе</link>.
- Коммиттеры, заинтересованные в обновлении документации, должны
- ознакомиться с <link xlink:href="&url.books.fdp-primer;/index.html">Учебником по Проекту
- Документирования FreeBSD для новых участников</link>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.ru.email;</term>
-
- <listitem>
- <para>Руслан великолепно знает тонкости &man.mdoc.7;. Если вы
- пишете справочную страницу и нуждаетесь в совете по ее структуре
- или разметке, обратитесь к Руслану.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.bde.email;</term>
-
- <listitem>
- <para>Брюс занимается общим стилем кода проекта. Если ваш коммит
- мог бы быть лучше оформлен, Брюс укажет вам на это. Радуйтесь,
- что такой человек вообще есть. Брюс также является знатоком
- различных стандартов, применимых к FreeBSD.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.murray.email;</term>
- <term>&a.dwhite.email;</term>
- <term>&a.rwatson.email;</term>
- <term>&a.kensmith.email;</term>
- <term>&a.hrs.email;</term>
- <term>&a.mux.email;</term>
- <term>&a.bmah.email;</term>
-
- <listitem>
- <para>Таков состав группы &a.re;. Эта группа отвечает за сроки
- и процесс выпуска релизов. В период заморозки кода, выпускающие
- инженеры принимают окончательные решения по поводу всех изменений
- системы в ветви, готовящейся к очередному релизу. Если вы хотите
- интегрировать какие-либо изменения из &os.current; в
- &os.stable; (какими бы они ни были в данный конкретный момент),
- вам предстоит общаться с этой группой.</para>
-
- <para>Хироки, кроме того, ведет раздел документации к релизам
- (<filename>src/release/doc/*</filename>). Если ваши изменения
- стоят того, чтобы быть упомянутыми в информации о релизе,
- сообщите об этом Хироки. Еще лучше, если вы пошлете патч
- с предлагаемыми изменениями к документу.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.cperciva.email;</term>
-
- <listitem>
- <para>Колин&nbsp;&mdash;
- <link xlink:href="&url.base;/security/">FreeBSD Security
- Officer</link>
- и отвечает за деятельность группы &a.security-officer;.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.wollman.email;</term>
-
- <listitem>
- <para>Если вам нужен совет по поводу темных мест сетевой части ядра,
- или вы не уверены в планируемом изменении сетевой подсистемы,
- мудрым решением будет обратиться к Гарретту. Помимо того, он
- хорошо разбирается в различных стандартах, применимых к
- FreeBSD.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.committers;</term>
-
- <listitem>
- <para>cvs-committers&nbsp;&mdash; адрес, используемый CVS для посылки
- сообщений о коммитах. Вы <emphasis>никогда</emphasis> не должны
- посылать письма напрямую на этот адрес; следует лишь отвечать на
- него, когда вам нужно послать короткие комментарии, непосредственно
- относящиеся к коммиту.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>&a.developers;</term>
-
- <listitem>
- <para>Все коммиттеры подписаны на список рассылки -developers.
- Этот список создан для обсуждения вопросов, касающихся
- <quote>сообщества</quote> коммиттеров FreeBSD, таких как выборы
- Правления, анонсы и т.п.</para>
-
- <para>&a.developers; служит для только для использования FreeBSD
- коммиттерами. Коммиттеры должны иметь возможность публично
- обсуждать вещи, которые должны быть разрешены, перед тем, как
- они будут публично объявлены. Данные дискуссии
- не предназначены для широкой публики и могут нанести вред
- FreeBSD.</para>
-
- <para>Все FreeBSD коммиттеры должны соблюдать авторские права
- оригинального автора или авторов писем из этого списка рассылки. Не
- публикуйте и не пересылайте сообщения из &a.developers; вне
- подписчиков данного списка рассылки без согласия всех авторов.</para>
-
- <para>Нарушители авторских прав будут удалены из списка
- подписчиков &a.developers;, и будут приостановлены их коммиттерские
- привилегии. Повторяющиеся или вопиющие нарушения приведут к
- полному лишению коммиттерских прав.</para>
-
- <para>Этот список <emphasis>не</emphasis>
- предназначен для обсуждения кода, и <emphasis>не
- является</emphasis> заменой списков &a.arch; или &a.audit;.
- На самом деле, такое его использование вредит проекту, поскольку
- открытые обсуждения вопросов, касающихся всего сообщества
- пользователей FreeBSD в закрытом списке недопустимы. И, наконец:
- <emphasis>никогда, действительно никогда не пишите в &a.developers;
- с копией в другой список рассылки FreeBSD</emphasis>. Никогда не
- пишите в какой-либо другой список рассылки с копией в
- &a.developers;. Подобные действия серьезно подрывают смысл
- существования данного списка рассылки.</para>
- </listitem>
- </varlistentry>
- </variablelist>
- </sect1>
-
- <sect1 xml:id="ssh.guide">
- <title>SSH: быстрый старт</title>
-
- <procedure>
- <step>
- <para>Если вы используете FreeBSD версии 4.0 или более позднюю,
- OpenSSH включен в базовую поставку системы. Для более ранних версий
- обновите и установите OpenSSH из порта
- <package>security/openssh</package>.</para>
- </step>
-
- <step>
- <para>Для тех, кто не хочет набирать свой пароль каждый раз при
- использовании &man.ssh.1; и использует для авторизации ключи
- RSA или DSA, удобной будет утилита &man.ssh-agent.1;. Если вы
- собираетесь использовать ее, убедитесь, что она запущена раньше
- прочих приложений. Пользователи X Window, например, обычно
- запускают ее из файлов <filename>.xsession</filename> или
- <filename>.xinitrc</filename>. Подробнее смотрите в справочной
- странице &man.ssh-agent.1;.</para>
- </step>
-
- <step>
- <para>Создайте пару ключей при помощи &man.ssh-keygen.1;. Ключи
- появятся в каталоге
- <filename>$HOME/.ssh/</filename>.</para>
- </step>
-
- <step>
- <para>Пошлите ваш публичный ключ (содержимое файла
- <filename>$HOME/.ssh/id_dsa.pub</filename>
- или <filename>$HOME/.ssh/id_rsa.pub</filename>)
- вашему будущему ментору, чтобы он мог быть помещен в файл
- <filename><replaceable>yourlogin</replaceable></filename> в каталоге
- <filename>/c/ssh-keys/</filename> на машине
- <systemitem>freefall</systemitem>.
- </para>
- </step>
- </procedure>
-
- <para>Теперь вы можете пользоваться утилитой &man.ssh-add.1; для
- авторизации один раз за сессию. Утилита запросит кодовую фразу
- для вашего секретного ключа и затем сохранит ее в агенте авторизации
- (&man.ssh-agent.1;). Если вы хотите удалить сохраненный секретный
- ключ из агента, используйте команду <command>ssh-add -d</command>.</para>
-
- <para>Для теста используйте команду типа <command>ssh
- freefall.FreeBSD.org ls /usr</command>.</para>
-
- <para>За дополнительной информацией обращайтесь к
- <package>security/openssh</package>, &man.ssh.1;,
- &man.ssh-add.1;, &man.ssh-agent.1;, &man.ssh-keygen.1; и
- &man.scp.1;.</para>
- </sect1>
-
- <sect1 xml:id="rules">
- <title>Большой Список Правил Коммиттера FreeBSD</title>
-
- <orderedlist>
- <listitem>
- <para>Уважайте других коммиттеров.</para>
- </listitem>
-
- <listitem>
- <para>Уважайте других участников проекта.</para>
- </listitem>
-
- <listitem>
- <para>Обсудите любые значимые изменения
- <emphasis>до</emphasis> коммита.</para>
- </listitem>
-
- <listitem>
- <para>Уважайте существующих мейнтейнеров (указанных в поле
- <varname>MAINTAINER</varname> файлов <filename>Makefile</filename>
- или в файле <filename>MAINTAINER</filename> в корневом каталоге
- репозитория).</para>
- </listitem>
-
- <listitem>
- <para>Любое спорное изменение необходимо откатить (back out) в ожидании
- решения, если того требует мейнтейнер. Вопросы безопасности могут
- перекрывать мнение мейнтейнера, если так решит Security Officer.
- </para>
- </listitem>
-
- <listitem>
- <para>Изменения вносятся в ветвь &os.current; до &os.stable;, за
- исключением случаев, прямо разрешенных выпускающими инженерами или
- неприменимости изменения к &os.current;. Любое нетривиальное и
- не срочное изменение должно быть выдержано в &os.current; в течение
- по крайней мере 3 дней перед переносом, чтобы его могли адекватно
- протестировать. Выпускающие инженеры обладают той же властью в
- ветви &os.stable;, что и мейнтейнеры (см. правило 5).</para>
- </listitem>
-
- <listitem>
- <para>Не пререкайтесь с другими коммиттерами публично: это дурно
- выглядит. Если вам необходимо с чем-либо <quote>категорически не
- согласиться</quote>, делайте это личной почтой.</para>
- </listitem>
-
- <listitem>
- <para>Соблюдайте все периоды заморозки кода (core freeze), а также
- своевременно читайте списки рассылки <literal>committers</literal> и
- <literal>developers</literal>, чтобы быть в курсе расписания таких
- периодов.</para>
- </listitem>
-
- <listitem>
- <para>Если вы сомневаетесь в какой-либо процедуре, сначала
- спросите!</para>
- </listitem>
-
- <listitem>
- <para>Тестируйте свои изменения перед коммитом.</para>
- </listitem>
-
- <listitem>
- <para>Не производите коммит в деревья
- <filename>src/contrib</filename>,
- <filename>src/crypto</filename> и
- <filename>src/sys/contrib</filename> без
- <emphasis>прямого</emphasis> разрешения (approval) соответствующего
- мейнтейнера(ов).</para>
- </listitem>
- </orderedlist>
-
- <para>Невыполнение этих правил может служить основанием для приостановки
- или, в случае рецидивов, полного лишения коммиттерских прав. Члены
- Правления (Core) имеют право временно приостановить права коммиттера
- до момента, когда Правление в целом сможет решить вопрос.
- В <quote>аварийном</quote> случае (коммиттер разрушает репозиторий)
- такие права имеют также ответственные за репозиторий. Для приостановки
- прав коммиттера более чем на неделю или для полного лишения таковых прав
- требуется квалифицированное большинство (2/3) голосов Правления. Это
- правило существует не потому, что Правление состоит из злобных
- диктаторов, разбрасывающихся коммиттерами словно банками из-под колы,
- но ради предоставления проекту аварийного выключателя. Если кто-то
- выходит из-под контроля, важно иметь возможность справиться с ситуацией
- немедленно, а не быть втянутыми в дебаты. В любом случае, коммиттер,
- чьи права приостановлены, имеет право на <quote>слушания
- Правления</quote>, на которых определяется срок приостановки или
- лишения коммиттерских прав. Коммиттер, права которого приостановлены
- может запросить пересмотр своего вопроса через 30 дней и каждые
- последующие 30 дней (если общий период приостановки превышает 30 дней).
- Коммиттер, полностью лишенный прав, может запросить пересмотр по
- истечении 6 месяцев. Правила пересмотра являются <emphasis>полностью
- неформальными</emphasis> и во всех случаях Правление имеет право
- отвергнуть запрос на пересмотр, если считает свое первоначальное решение
- верным.</para>
-
- <para>Во всех прочих аспектах деятельности проекта, Правление является
- подмножеством коммиттеров и ограничено <emphasis>теми же
- правилами</emphasis>. Само по себе членство в Правлении не дает права
- преступать описанные правила. Правление обладает <quote>особой
- силой</quote> только в случае деятельность как целое, а не на
- индивидуальной основе. Члены Правления&nbsp;&mdash; в первую очередь
- коммиттеры.</para>
-
- <sect2>
- <title>Подробности</title>
-
- <orderedlist>
- <listitem xml:id="respect">
- <para>Уважайте других коммиттеров.</para>
-
- <para>Вы должны относиться к другим коммиттерам как к коллегам по
- разработке (кем они и являются). Несмотря на возникающие временами
- попытки утверждать обратное, никто не стал коммиттером по своей или
- чьей-либо еще глупости, и мало что обижает сильнее, чем подобные
- обвинения от коллег. Вне зависимости от того, всегда ли мы
- чувствуем уважение друг к другу или нет (у каждого бывают не лучшие
- дни), мы всегда должны <emphasis>выказывать</emphasis> уважение к
- другим коммиттерам, как в публичных форумах, так и в личной почте.
- </para>
-
- <para>Способность совместной работы в течение длительного
- времени&nbsp;&mdash; одно из главных достижений проекта, много
- более важное, чем любой набор изменений в коде, и никакие аргументы
- относительно кода не стоят потерь в возможности гармонично работать
- вместе.</para>
-
- <para>Чтобы не противоречить этому правилу, никогда не посылайте
- писем, когда вы злы или каким-либо иным образом можете
- спровоцировать других на конфронтацию. Сначала успокойтесь,
- затем подумайте о том, как наиболее эффективно убедить оппонента(ов)
- в правильности ваших аргументов; не подливайте масла в огонь ради
- краткого мига злорадства, если ценой будет долгая ругань.
- Это не просто крайне <quote>энергетически неэффективно</quote>:
- повторяющиеся прецеденты публичной агрессии, влияющие на нашу
- способность работать вместе, будут всерьез рассмотрены лидерами
- проекта, и могут привести к приостановке или потере прав
- коммиттера. Во внимание будут приниматься как публичные
- высказывания, так и личная переписка; это не означает, что Правление
- будет требовать раскрытия тайны переписки, однако, все
- предоставленные затронутыми коммиттерами материалы будут
- рассмотрены.</para>
-
- <para>Описанные процедуры никого не могут порадовать даже в малом,
- однако <quote>целостность проекта превыше всего</quote>. Никакой
- объем кода не стоит потери целостности.</para>
- </listitem>
-
- <listitem>
- <para>Уважайте других участников проекта.</para>
-
- <para>Вы не всегда были коммиттером. В свое время вы были простым
- сторонним участником (contributor). Помните об этом все время.
- Помните, сколь важно было добиться внимания и помощи. Не забывайте,
- насколько ваше участие было важным для вас. Помните свои ощущения.
- Не препятствуйте другим участникам и не унижайте их. Относитесь к
- ним с уважением. Возможно, они наши будущие коммиттеры, и они
- настолько же важны для проекта, как и коммиттеры. Их вклад в
- проект настолько же ценен и важен, как и ваш. В конце концов,
- вам пришлось приложить немало усилий для проекта, чтобы стать
- коммиттером. Всегда помните об этом.</para>
-
- <para>Обдумайте первое правило <xref linkend="respect"/> и применяйте
- его и к другим участникам проекта.</para>
- </listitem>
-
- <listitem>
- <para>Обсудите любые значимые изменения
- <emphasis>до</emphasis> коммита.</para>
-
- <para>Репозиторий CVS&nbsp;&mdash; не место для анонса изменений или
- обсуждения их. Все изменения должны обсуждаться в списках
- рассылки, и лишь после достижения консенсуса вносится в
- репозиторий. Это не означает, что вы должны спрашивать разрешения
- на исправление очевидной синтаксической ошибки в коде или опечатки
- в странице справочника. Вы должны ощутить, когда предполагаемое
- изменение требует предварительного обсуждения и обратной связи.
- Как правило, никто не станет возражать против обширных изменений,
- если результат очевидно лучше предыдущего состояния, однако
- никто не любит, когда эти изменения <emphasis>неожиданны</emphasis>.
- Лучший способ убедиться, что вы на правильном пути&nbsp;&mdash;
- дать ваш код просмотреть кому-либо еще из коммиттеров.</para>
-
- <para>Если вы сомневаетесь, просите отзыва!</para>
- </listitem>
-
- <listitem>
- <para>Уважайте существующих мейнтейнеров.</para>
-
- <para>Многие части кода FreeBSD не являются чьей-либо
- <quote>собственностью</quote>: ситуация, когда некто подпрыгнет
- и завопит, если вы внесете изменения в <quote>его</quote> код,
- редка; однако, всегда стоит предварительно проверить. Одним из
- используемых соглашений было добавление строки MAINTAINER в файл
- <filename>Makefile</filename> пакета или части дерева, которая
- активно поддерживается одним или несколькими коммиттерами; см.
- также соответствующий раздел <link xlink:href="&url.books.developers-handbook;/policies.html">
- http://www.FreeBSD.org/doc/ru_RU.KOI8-R/books/developers-handbook/policies.html</link>.
- В случае, если какой-то участок системы
- имеет несколько мейнтейнеров, изменение его одним из них должно
- быть одобрено по крайней мере одним из других. В случаях, когда
- <quote>принадлежность</quote> кода неясна, вы можете взглянуть
- на историю коммитов, чтобы понять, кто наиболее активно либо в
- последнее время работал в этой области.</para>
-
- <para>Отдельные области FreeBSD попадают под контроль коммиттеров,
- занимающихся поддержкой целых категорий на пути эволюции FreeBSD,
- таких как локализация или сетевая подсистема. Для дополнительной
- информации смотрите <link xlink:href="&url.articles.contributors;/staff-who.html">
- http://www.FreeBSD.org/doc/en_US.ISO8859-1/articles/contributors/staff-who.html</link>
- </para>
- </listitem>
-
- <listitem>
- <para>Любое спорное изменение необходимо откатить в ожидании
- решения, если того требует мейнтейнер. Вопросы безопасности могут
- перекрывать мнение мейнтейнера, если так решит Security Officer.
- </para>
-
- <para>Это может быть нелегко, особенно в период конфликта (когда
- каждый участник уверен, что прав именно он). К счастью, CVS
- дает возможность, вместо того чтобы вести бушующую перебранку,
- просто откатить внесенные изменения, успокоиться всем участникам
- конфликта, а затем попробовать найти взаимоприемлемый путь.
- Если в конце концов окажется, что изменение стоит того, оно
- может быть легко применено вновь. В противном случае,
- пользователям не придется жить с неправильным состоянием дерева
- исходных текстов, пока стороны заняты выяснением отношений.
- Запросы на откаты возникают <emphasis>крайне</emphasis> редко, поскольку обсуждение обычно
- выявляет неверные или спорные моменты до коммита; однако, если
- такой запрос все же возник, он должен быть безусловно удовлетворен,
- чтобы мы могли спокойно выяснить, было изменение неверным или
- нет.</para>
- </listitem>
-
- <listitem>
- <para>Изменения вносятся в ветвь &os.current; до &os.stable;, за
- исключением случаев, прямо разрешенных выпускающими инженерами или
- неприменимости изменения к &os.current;. Любое нетривиальное и
- не срочное изменение должно быть выдержано в &os.current; в течение
- по крайней мере 3 дней перед переносом, чтобы его могли адекватно
- протестировать. Выпускающие инженеры обладают той же властью в
- ветви &os.stable;, что и мейнтейнеры (см. правило 5).</para>
-
- <para>Это еще одно <quote>не обсуждаемое</quote> правило: выпускающий
- инженер безусловно отвечает за последствия, если выясняется что
- внесенные изменения неверны. Уважайте эти права, и помогайте
- группе выпуска релизов в работе с ветвью &os.stable;. На первый
- взгляд может показаться, что ветвь &os.stable; развивается
- чересчур консервативно. Не забывайте, однако, что разумный
- консерватизм&nbsp;&mdash; отличительное свойство &os.stable;,
- и что эта ветвь развивается по законам, отличным от законов
- &os.current;. Кроме того, нет смысла тестировать изменения в
- &os.current;, если они немедленно переносятся в &os.stable;.
- Разработчики &os.current; должны иметь возможность протестировать
- внесенные изменения, так что оставьте время для такого
- тестирования, если только речь не идет о критическом исправлении
- или о чем-либо очевидно не требующем тестирования (например,
- исправления опечаток в страницах справочника, очевидных ошибок или
- опечаток в исходных текстах и т.п.) Иными словами, исходите из
- соображений здравого смысла.</para>
-
- <para>Изменения в ветви поддержки безопасности (security branches,
- например, <literal>RELENG_6_0</literal>) должны быть одобрены
- членом группы &a.security-officer; или, в некоторых случаях, одним
- из выпускающих инженеров (&a.re;).</para>
- </listitem>
-
- <listitem>
- <para>Не пререкайтесь с другими коммиттерами публично: это дурно
- выглядит. Если вам необходимо с чем-либо <quote>категорически не
- согласиться</quote>, делайте это личной почтой.</para>
-
- <para>Для всех участников проекта очень важно поддержание его
- публичного образа; особенно это важно, если мы хотим продолжать
- привлекать новых участников. Случается, что, несмотря на все
- усилия по сохранению власти над собой, люди срываются и грубят
- друг другу. Лучшее, что здесь можно сделать&nbsp;&mdash;
- минимизировать эффект, пока все участники не успокоятся.
- Следовательно, вы не должны озвучивать свою ярость публично,
- а равно и пересылать частную переписку в общедоступные списки
- рассылки. Выражения, употребляющиеся в переписке один на один
- зачастую гораздо менее сдержанны, чем те, которые каждый участник
- употребил бы публично, так что подобной переписке нет места в
- публичных рассылках: это лишь усугубит и без того неприятную
- ситуацию. Если кто-либо, говорящий вам нелицеприятные слова,
- делает это в частной переписке, соблюдайте приличия и вы:
- отвечайте приватно. Если, по вашему мнению, кто-либо из
- разработчиков поступает с вами нечестно, и это настолько
- мучит вас, обратитесь к Правлению, а не выносите конфликт
- наружу. Правление приложит все силы к разрешению ситуации,
- выступая в роли третейского судьи. В случаях, когда спор
- затрагивает какие-либо части кода, и участники не могут прийти к
- взаимно приемлемому соглашению, Правление может привлечь
- независимого участника для разрешения вопроса. В этом случае
- все участники конфликта должны согласиться принять решение,
- вынесенное третьей стороной.</para>
- </listitem>
-
- <listitem>
- <para>Соблюдайте все периоды заморозки кода (core freeze), а также
- своевременно читайте списки рассылки <literal>committers</literal> и
- <literal>developers</literal>, чтобы быть в курсе расписания таких
- периодов.</para>
-
- <para>Внесение не одобренных изменений в период заморозки кода
- является довольно большой ошибкой. Коммиттеры должны быть
- в курсе событий, прежде чем внести 10 мегабайт изменений
- после долгого отсутствия. Нарушающие это правило будут
- подвергаться заморозке коммиттерского бита до прохождения курса
- в Счастливом Лагере Повышения Квалификации FreeBSD, который
- организован в Гренландии.</para>
- </listitem>
-
- <listitem>
- <para>Если вы сомневаетесь в какой-либо процедуре, сначала
- спросите!</para>
-
- <para>Множество ошибок совершается, когда кто-либо совершает
- поспешные действия, думая, что поступает правильно. Делая
- что-либо впервые, вы, скорее всего, не знаете принятых мелочей
- и тонкостей, и лучше всего будет сначала спросить, не то вы
- имеете шансы выставить себя не в лучшем свете. Не стоит
- стыдиться спросить <quote>Как, черт возьми, это надо
- делать?</quote> Мы и так знаем, что вы умны: иначе вы не стали
- бы коммиттером.</para>
- </listitem>
-
- <listitem>
- <para>Тестируйте свои изменения перед коммитом.</para>
-
- <!-- XXX Needs update re sparc64 + pc98
- Also, needs more details on which machines are available for testing
- -->
- <para>Это правило может показаться очевидным. Впрочем, если бы оно
- действительно было очевидно для всех, мы не так часто сталкивались
- со случаями явного его нарушения. Если ваши изменения затрагивают
- ядро, убедитесь, что после него нормально собираются ядра GENERIC
- и LINT. Если вы изменяете другую часть исходного кода, убедитесь,
- что код собирается (успешно завершается make buildworld). Если
- вы изменяете код в какой-либо ветви, убедитесь, что вы тестируете
- его на машине, которая работает именно на этой ветви кода. Если
- ваши изменения могут затронуть другие архитектуры, проверьте его
- на всех поддерживаемых архитектурах. Список доступных ресурсов
- можно найти на странице <uri xlink:href="&url.base;/internal/">&url.base;/internal/</uri>. По мере расширения списка поддерживаемых платформ
- в кластер будут добавляться соответствующие машины для
- тестирования.</para>
- </listitem>
-
- <listitem>
- <para>Не производите коммит в деревья
- <filename>src/contrib</filename>,
- <filename>src/crypto</filename> и
- <filename>src/sys/contrib</filename> без
- <emphasis>прямого</emphasis> разрешения (approval) соответствующего
- мейнтейнера(ов).</para>
-
- <para>Описанные деревья содержат исходный код сторонних
- производителей, который, как правило, импортируется в
- соответствующие ветви. Любой коммит, даже не выводящий файл из
- ветви производителя, может стать головной болью для ответственных
- за эту часть проекта разработчиков. Так что, если у вас нет
- <emphasis>прямого</emphasis> разрешения от мейнтейнера,
- <emphasis>ничего</emphasis> не делайте с этой частью
- репозитория (если, конечно, вы не поддерживаете этот код
- сами).</para>
-
- <para>Отметим, что только что сказанное вовсе не означает, что вы не
- должны пытаться улучшить упомянутый код, наоборот, этому будут
- только рады. Лучше всего, если вы передадите ваши исправления
- вендору. Если изменения специфичны для FreeBSD, обсудите вопрос
- с мейнтейнером, возможно, он посчитает разумным применить их
- локально. Тем не менее, что бы вы ни делали,
- <emphasis>не</emphasis> производите коммит сами!</para>
-
- <para>Если вы хотите стать ответственным за <quote>ничей</quote>
- участок дерева исходников, свяжитесь с &a.core;.</para>
- </listitem>
- </orderedlist>
- </sect2>
-
- <sect2>
- <title>Правила работы с различными архитектурами</title>
-
- <para>Начиная с версии 5.0 проект FreeBSD начал поддерживать несколько
- новых вычислительных архитектур, и более не является
- <quote>&i386;-центричным</quote>. Для упрощения поддержки FreeBSD
- на базе всех этих платформ Правлением было сформулировано следующее
- заявление:</para>
-
- <blockquote>
- <para>Основной 32-битной платформой разработки является i386;
- основная 64-битная платформа&nbsp;&mdash; Sparc64. Крупные
- изменения в дизайне (в том числе основные изменения в API и ABI)
- до попадания в репозиторий должны быть отлажены по крайней мере
- на одной 32 и одной 64-битной платформе, желательно на основных
- поддерживаемых платформах.</para>
- </blockquote>
-
- <para>Платформы i386 и Sparc64 были выбраны по причине широкой
- распространенности доступности для разработчиков; кроме того, они
- представляют принципиально разные подходы к дизайну процессора и
- системы в целом: порядок байт в слове, организация регистров,
- реализация DMA, кэша, страничной адресации и т.д.</para>
-
- <para>Процессор Alpha, конечно, является 64-битным, однако он
- представляет более традиционный дизайн и потому не может служить
- достаточно хорошей тестовой платформой для отработки тонкостей,
- с которыми разработчик может столкнуться на других 64-битных
- платформах. Платформа ia64 во многом сложна так же, как и
- Sparc64, однако ее доступность для разработчиков пока оставляет
- желать лучшего.</para>
-
- <para>Мы будем переформулировать эти правила по мере того, как будут
- меняться цены и доступность 64-битных платформ.</para>
-
- <!-- XXX ??? XXX -->
- <para>Кроме того, разработчики должны быть в курсе наших правил классов
- поддержки (Tier Policy) различных аппаратных архитектур. Эти правила
- предназначены для общего описание процесса разработки, и потому
- отличаются от вышеописанных требований к возможностям и архитектурам.
- Правила классов поддержки на период выпуска релизов много жестче, чем
- ограничения на изменения в процессе разработки.</para>
- </sect2>
-
- <sect2>
- <title>Другие рекомендации</title>
-
- <para>Перед коммитом в области документации используйте какие-либо
- средства проверки орфографии. Для документов SGML, кроме того,
- при помощи команды <command>make lint</command> следует проверить
- корректность форматирования.</para>
-
- <para>Для страниц справочника, при помощи утилиты из коллекции портов
- <command>manck</command> проверяйте корректность перекрестных ссылок
- и ссылок на файлы, а также наличие всех необходимых ссылок на синонимы
- (переменная <varname>MLINK</varname>).</para>
-
- <para>Не смешивайте функциональные изменения со стилистическими
- (не изменяющими функциональных свойств кода). Такое смешивание
- затрудняет вычленение изменений при использовании команды
- <command>cvs diff</command> и, таким образом, может скрыть появившиеся
- ошибки. Не смешивайте в коммите в деревья <filename>doc/</filename> и
- <filename>www/</filename> изменения текста и переформатирование: это
- затрудняет работу переводчиков. Производите все стилистические
- изменения или переформатирования отдельными коммитами, и четко
- обозначайте их как таковые в журнальных сообщениях к коммиту.</para>
- </sect2>
-
- <sect2>
- <title>Удаление возможностей</title>
-
- <para>При необходимости удаления какой-либо функциональной возможности
- из утилит базовой системы следует использовать следующую схему
- действий:</para>
-
- <orderedlist>
- <listitem>
- <para>В странице справочника и, возможно, в комментариях к релизу
- опция, утилита или интерфейс объявляются устаревающими и не
- рекомендованными к использованию (deprecated); их использование
- выводит предупреждение.</para>
- </listitem>
-
- <listitem>
- <para>Опция, утилита или интерфейс сохраняются до очередного
- основного релиза (релиз X.0).</para>
- </listitem>
-
- <listitem>
- <para>Опция, утилита или интерфейс удаляются, в том числе из
- документации: теперь они являются устаревшими. Как правило,
- об этом стоит упомянуть в комментариях к релизу.</para>
- </listitem>
- </orderedlist>
- </sect2>
- </sect1>
-
- <sect1 xml:id="archs">
- <title>Поддержка различных архитектур</title>
-
- <para>FreeBSD является хорошо портируемой операционной системой и
- предназначена для работы на самых разнообразных аппаратных
- архитектурах. Важной частью процесса обеспечения гибкости в
- поддержке современных тенденций развития оборудования является
- деление кода на машинно-зависимый (Machine Dependent, MD) и
- машинно-независимый (Machine Independent, MI), а также, по возможности,
- минимизация машинно-зависимой части кода. Каждая новая аппаратная
- архитектура, которую начинает поддерживать FreeBSD, ощутимо увеличивает
- работу по поддержке кода, инструментария и процесса выпуска релизов.
- Кроме того, становится значительно сложнее эффективно тестировать
- изменения в коде ядра. Все это делает необходимым введение различных
- классов поддержки для различных архитектур, при сохранении максимальной
- стабильности малого числа "основных платформ".</para>
-
- <sect2>
- <title>Основные намерения</title>
-
- <para>Проект FreeBSD предназначен для работы на рабочих станциях,
- серверах и высокопроизводительных встроенных системах. Сохраняя
- ориентир на малое количество архитектур в интересах таких систем,
- проект FreeBSD остается способен поддерживать высокий уровень
- надежности, стабильности и производительности, а также уменьшить
- нагрузку на различные группы поддержки проекта, такие как группы
- поддержки портов, документации, безопасности и выпуска релизов.
- Разнообразие поддерживаемых аппаратных платформ расширяет область
- применимости FreeBSD за счет поддержки новых возможностей (например,
- поддержка 64-битных процессоров, использование во встроенных системах
- и т.п.); тем не менее, расширение этого списка всегда должно быть
- тщательно оценено с позиций увеличения затрат на поддержку
- дополнительной аппаратной платформы.</para>
-
- <para>Проект FreeBSD делит различные аппаратные платформы на 4 класса.
- Для каждого класса описывается набор требований, необходимых для
- присвоения платформе данного класса, и обязательства разработчиков
- по отношению к платформе. Кроме того, определяется порядок смены
- класса для архитектуры.</para>
- </sect2>
-
- <sect2>
- <title>Класс 1: Полностью поддерживаемые архитектуры</title>
-
- <para>Платформы 1 класса полностью поддерживаются группой безопасности,
- группой выпуска релизов и мейнтейнерами инструментария. Новые
- возможности, добавляемые в код системы, должны быть полностью
- функциональны для всех архитектур первого класса для каждого из
- релизов (исключением могут быть архитектурно-зависимые возможности,
- такие как драйвера аппаратуры). Как правило, все платформы 1 класса
- должны поддерживаться системами сборки либо расположенными
- непосредственно в кластере FreeBSD.org, либо легко доступными для
- всех разработчиков.</para>
-
- <para>Архитектуры первого класса должны быть готовыми к эксплуатации
- под управлением FreeBSD во всех аспектах, включая процесс установки
- и среду разработки.</para>
-
- <para>В настоящее время платформами 1 класса являются i386, Sparc64,
- AMD64, and PC98.</para>
- </sect2>
-
- <sect2>
- <title>Класс 2: Архитектуры для разработчиков</title>
-
- <para>Платформы 2 класса не поддерживаются группами безопасности и
- выпуска релизов. Поддержка инструментария оставляется на усмотрение
- его мейнтейнеров. Новые возможности, реализуемые в FreeBSD, должны
- быть реализуемы на этих платформах, однако непосредственная реализация
- на момент добавления кода в дерево исходных текстов не требуется.
- Реализация порта на архитектуру 2 класса может быть добавлена в
- репозиторий, если она не входит в противоречие с текущим состоянием
- систем первого класса и не влияет в существенной степени на прочие
- платформы 2 класса. Для добавления архитектуры 2 класса в дерево
- исходных текстов FreeBSD система должна быть способна загрузиться
- хотя бы в однопользовательский режим на реальной аппаратуре.
- Некоторые исключения из последнего правила могут быть сделаны для
- новой аппаратуры, находящейся в состоянии разработки и временно
- не доступной для проекта.</para>
-
- <para>Обычно архитектурами 2 класса являются те, которые планируются
- к переходу в 1 класс, но пока находятся в состоянии разработки.
- Также во втором классе могут находится платформы, перешедшие из
- 1 класса по причине потери актуальности, по мере того как уменьшается
- количество ресурсов, доступных для поддержки системы в состоянии
- готовности к промышленной эксплуатации.</para>
-
- <para>В настоящее время платформами 2 класса являются PowerPC
- и ia64.</para>
- </sect2>
-
- <sect2>
- <title>Класс 3: Экспериментальные архитектуры</title>
-
- <para>Платформы 3 класса не поддерживаются группами безопасности и
- выпуска релизов. Поддержка инструментария оставляется на усмотрение
- его мейнтейнеров. Архитектурами третьего класса могут быть: те, для
- которых нет и в ближайшее время не предвидится доступного проекту
- оборудования; имеющие менее трех активных разработчиков; не способные
- загрузиться в однопользовательский режим на реальной аппаратуре (или
- под управлением эмулятора, если реальная аппаратура недоступна);
- наконец, системы, которые оцениваются как исчезающие, чья дальнейшая
- распространенность сомнительна. Поддержка систем 3 класса не вносится
- в основное дерево исходных текстов FreeBSD, однако работа над такими
- архитектурами может производиться в репозитории Perforce FreeBSD, для
- облегчения контроля версий и дальнейшей интеграции с основной массой
- кода.</para>
-
- <para>В настоящее время единственной платформой 3 класса является
- &s390;.</para>
- </sect2>
-
- <sect2>
- <title>Класс 4: не поддерживаемые архитектуры</title>
-
- <para>Системы 4 класса никак не поддерживаются проектом.</para>
-
- <para>К 4 классу относятся все архитектуры, не перечисленные выше.</para>
- </sect2>
-
- <sect2>
- <title>Правила смены класса для архитектуры</title>
-
- <para>Для переноса платформы из класса в класс требуется решение,
- утвержденное Правлением, которое, в свою очередь, согласует его
- с группами безопасности, выпуска релизов и поддержки инструментария.
- </para>
- </sect2>
- </sect1>
-
- <sect1 xml:id="ports">
- <title>FAQ по работе с портами</title>
-
- <qandaset>
- <qandadiv>
- <title>Добавление нового порта</title>
-
- <qandaentry>
- <question>
- <para>Как добавить новый порт?</para>
- </question>
-
- <answer>
- <para>Для начала прочитайте раздел, посвященный репозиторному
- копированию.</para>
-
- <para>Самым простым будет использовать скрипт
- <command>addport</command> на машине
- <systemitem>freefall</systemitem>. Он добавит порт из указанного вами
- каталоге, определив нужную категорию из файла
- <filename>Makefile</filename>, добавит строку в файл
- <filename>CVSROOT/modules</filename> и в файл
- <filename>Makefile</filename> для нужной категории.
- Скрипт был написан &a.mharo.email; и &a.will.email;; вопросы и исправления
- по поводу <command>addport</command> следует отправлять Уиллу,
- как текущему мейнтейнеру.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Что еще следует сделать, добавляя новый порт?</para>
- </question>
-
- <answer>
- <para>Проверьте его. Желательно убедиться в том, что порт и
- соответствующий пакет корректно собираются. Рекомендуемая
- последовательность действий такова:</para>
-
- <screen>&prompt.root; <userinput>make install</userinput>
-&prompt.root; <userinput>make package</userinput>
-&prompt.root; <userinput>make deinstall</userinput>
-&prompt.root; <userinput>pkg_add <replaceable>имя собранного пакета</replaceable></userinput>
-&prompt.root; <userinput>make deinstall</userinput>
-&prompt.root; <userinput>make reinstall</userinput>
-&prompt.root; <userinput>make package</userinput>
- </screen>
-
- <para>Более подробные инструкции можно найти в
- <link xlink:href="&url.books.porters-handbook;/index.html">Руководстве
- FreeBSD по созданию портов</link>.</para>
-
- <para>Пользуйтесь &man.portlint.1; для проверки корректности порта.
- Не обязательно добиваться полного отсутствия предупреждений,
- но по крайней мере исправьте простейшие из них.</para>
-
- <para>Если новый порт прислал человек, еще не упомянутый в
- <link xlink:href="&url.articles.contributors;/contrib-additional.html">Списке
- прочих участников</link>, добавьте его имя туда.</para>
-
- <para>Закройте PR, если новый порт пришел в виде PR. Для этого
- воспользуйтесь командой
- <userinput>edit-pr <replaceable>PR#</replaceable></userinput>
- на машине <systemitem>freefall</systemitem> и измените значение в строке
- <varname>state</varname> с <constant>open</constant> на
- <constant>closed</constant>. Затем опишите причину смены
- статуса, и на этом работа закончена.</para>
- </answer>
- </qandaentry>
- </qandadiv>
-
- <qandadiv>
- <title>Удаление порта</title>
-
- <qandaentry>
- <question>
- <para>Как удалить существующий порт?</para>
- </question>
-
- <answer>
- <para>Для начала прочтите раздел о репозиторном копировании.
- Прежде чем удалить порт, вы должны проверить, что удаление не
- затронет другие порты коллекции.</para>
- <itemizedlist>
- <listitem>
- <para>Убедитесь, что другие порты не зависят от удаляемого:</para>
- <itemizedlist>
- <listitem>
- <para>Имя пакета (PKGNAME) должно встречаться в свежем
- файле INDEX ровно один раз.</para>
- </listitem>
- <listitem>
- <para>В файлах Makefile* других портов не должно
- встречаться ни одной ссылки на каталог удаляемого
- порта или имя его пакета (PKGNAME).</para>
- </listitem>
- </itemizedlist>
- </listitem>
- <listitem>
- <para>Удалите порт:</para>
-
- <procedure>
- <step>
- <para>Удалите файлы порта командой
- <command>cvs remove</command>.</para>
- </step>
-
- <step>
- <para>Удалите строку <varname>SUBDIR</varname> для
- удаляемого порта из файла <filename>Makefile</filename>
- категории.</para>
- </step>
-
- <step>
- <para>Удалите запись для порта из файла модулей
- <filename>CVSROOT/modules</filename>.</para>
- </step>
-
- <step>
- <para>Добавьте соответствующую строку в файл
- <filename>ports/MOVED</filename>.</para>
- </step>
-
- <step>
- <para>Если порт упоминается в файле
- <filename>ports/LEGAL</filename>, удалите его оттуда.
- </para>
- </step>
- </procedure>
- </listitem>
- </itemizedlist>
-
- <para>Вы можете воспользоваться скриптом <command>rmport</command>
- из каталога <filename>ports/Tools/scripts</filename>.
- Этот скрипт написал &a.vd.email;, и он же его поддерживает, так что
- вопросы, исправления и замечания по поводу <command>rmport</command>
- следует посылать непосредственно ему.</para>
- </answer>
- </qandaentry>
- </qandadiv>
-
- <qandadiv>
- <title>Репозиторное копирование</title>
-
- <qandaentry>
- <question>
- <para>Когда требуется репозиторное копирование?</para>
- </question>
-
- <answer>
- <para>При необходимости добавления порта, имеющего отношение
- к другому, уже находящемуся в репозитории в другом каталоге,
- необходимо произвести репозиторное копирование. В данном
- случае <wordasword>имеющий отношение</wordasword> означает
- другую версию или небольшую модификацию. Примерами могут
- служить различные версии
- <filename>print/ghostscript*</filename> и английская и
- локализованные версии
- <filename>x11-wm/windowmaker*</filename>.</para>
-
- <para>Другим примером является необходимость перенести порт из
- одного подкаталога в другой, или переименовать каталог, когда
- автор меняет имя своей программы.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Когда репозиторное копирование <emphasis>не</emphasis>
- требуется?</para>
- </question>
-
- <answer>
- <para>Если нет истории, которую стоило бы сохранять. Для порта,
- добавленного в неправильную категорию и сразу же перемещенного,
- будет вполне достаточно выполнить команды
- <command>cvs remove</command> для старого варианта и
- <command>addport</command> для нового.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Что нужно делать?</para>
- </question>
-
- <answer>
- <para>Создайте в <application>GNATS</application> PR, описав
- причины репозиторного копирования. Поменяйте ответственного
- на <literal>portmgr</literal> и установите статус
- (<varname>state</varname>) в состояние
- <literal>repocopy</literal>. Если ваш запрос будет одобрен
- группой &a.portmgr;, он будет переадресован на
- <literal>pcvs</literal>. &a.portmgr; может произвести
- копирование каталогов самостоятельно; в противном случае
- группа &a.pcvs; произведет собственно
- копирование и вернет вам ваш PR. После этого, вам необходимо
- проделать следующее:</para>
-
- <itemizedlist>
- <listitem>
- <para>После репозиторного копирования порта:</para>
-
- <procedure>
- <step>
- <para>Обновите новый вариант порта до новой версии.
- Не забудьте изменить строку <varname>LATEST_LINK</varname>,
- чтобы не получить двух портов с одним именем. В
- некоторых исключительных случаях может быть необходимо
- изменить переменную <varname>PORTNAME</varname> вместо
- <varname>LATEST_LINK</varname>, но это должно быть сделано
- только тогда когда это действительно нужно. Например,
- при использовании существующего порта в качестве основы для
- весьма похожей программы с другим именем или при обновлении
- порта до новой основной версии программы, при котором изменяется
- имя самого дистрибутива, как в случае перехода с
- <filename>textproc/libxml</filename> на
- <filename>textproc/libxml2</filename>. В большинстве случаев
- изменение <varname>LATEST_LINK</varname> должно быть достаточно.</para>
- </step>
-
- <step>
- <para>Добавьте новый каталог в список
- <varname>SUBDIR</varname> в родительском файле
- <filename>Makefile</filename>.
- Для проверки вы можете воспользоваться
- командой <command>make checksubdirs</command>.</para>
- </step>
-
- <step>
- <para>Если порт менял категорию, измените строку
- <varname>CATEGORIES</varname> в файле
- <filename>Makefile</filename>.</para>
- </step>
-
- <step>
- <para>Добавьте строку для нового модуля в
- <filename>CVSROOT/modules</filename>.</para>
- </step>
-
- <step>
- <para>Добавьте строку в файл
- <filename>ports/MOVED</filename>, в случае
- если вы удалили первоначальный порт.</para>
- </step>
- </procedure>
- </listitem>
-
- <listitem>
- <para>При удалении порта:</para>
-
- <procedure>
- <step>
- <para>Тщательно проверьте коллекцию на предмет портов,
- зависящих от удаляемого и обновите их при необходимости.
- Выполнение команды <command>grep</command> по содержимому
- файла <filename>INDEX</filename> недостаточно, поскольку
- некоторые порты могут быть сконфигурированы на этапе
- сборки. Рекомендуется использовать полный поиск при
- помощи команды <command>grep -r</command>.</para>
- </step>
-
- <step>
- <para>Удалите старый порт, запись <varname>SUBDIR</varname>
- и строку, описывающую модуль.</para>
- </step>
-
- <step>
- <para>Добавьте строку в файл
- <filename>ports/MOVED</filename>.</para>
- </step>
- </procedure>
- </listitem>
-
- <listitem>
- <para>После репозиторного перемещения (операции
- <quote>переименования</quote>, когда после копирования
- старый вариант удаляется):</para>
-
- <procedure>
- <step>
- <para>Используйте процедуры из предыдущих двух пунктов для
- активации нового порта и удаления старого.</para>
- </step>
- </procedure>
- </listitem>
- </itemizedlist>
- </answer>
- </qandaentry>
- </qandadiv>
-
- <qandadiv>
- <title>Заморозка портов</title>
-
- <qandaentry>
- <question>
- <para>Что такое <quote>заморозка портов</quote>?</para>
- </question>
-
- <answer>
- <para>Перед выпуском релиза для сохранения целостности различных
- частей системы требуется на некоторое время ограничить
- коммиты в дерево портов. Этот процесс и называется
- <quote>заморозкой портов</quote>.</para>
-
- <para>За дополнительной информацией по поводу правил поведения
- во время заморозки обращайтесь к документу
- <link xlink:href="&url.base;/ru/portmgr/qa.html">Задачи контроля
- качества для Группы управления портами</link>.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Сколько длится заморозка?</para>
- </question>
-
- <answer>
- <para>Обычно неделю или две.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Что это значит для меня?</para>
- </question>
-
- <answer>
- <para>Во время заморозки вы не можете производить какие-либо
- коммиты в дерево портов без прямого разрешения группы порт-менеджеров.
- <quote>Прямое разрешение</quote> здесь означает, что вы послали
- свой патч группе порт-менеджеров и получили ответ
- <quote>Вперед, производите коммит</quote>.
- </para>
-
- <para>В период заморозки не все изменения могут быть внесены
- в дерево. За подробностями обращайтесь к документу
- <link xlink:href="&url.base;/ru/portmgr/qa.html">Задачи контроля
- качества для Группы управления портами</link>.
- </para>
-
- <para>Отметим, что у вас нет подразумеваемого разрешения
- исправлять неработающий порт в период заморозки только потому,
- что порт не работает.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Откуда я узнаю о начале периода заморозки?</para>
- </question>
-
- <answer>
- <para>Обычно за 2-3 недели до начала периода заморозки
- кто-либо из группы порт-менеджеров посылает письмо с предупреждением об этом в
- &a.ports; и &a.committers;. Точное время начала периода
- заморозки определяется за несколько дней до собственно
- релиза, поскольку фиксируемое дерево портов должно быть
- синхронизировано с релизом, а точная дата выпуска
- определяется по ходу дела.</para>
-
- <para>Разумеется, после начала периода заморозки в
- &a.committers; будет отправлено еще одно предупреждение.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Как узнать, когда период заморозки портов закончился?</para>
- </question>
-
- <answer>
- <para>Завершение периода заморозки анонсируется группой порт-менеджеров
- посылкой письма в &a.ports; и &a.committers; через несколько
- часов после релиза. Отметим, что факт выпуска релиза не
- означает автоматического завершения заморозки. Нам потребуется
- убедиться, что в последние минуты не произошло ничего
- непредвиденного, что заставило бы перевыпускать релиз.</para>
- </answer>
- </qandaentry>
- </qandadiv>
-
- <qandadiv>
- <title>Создание новой категории</title>
-
- <qandaentry>
- <question>
- <para>Какова процедура создания новой категории портов?</para>
- </question>
-
- <answer>
- <para>Разработчик, предлагающий новую категорию, должен
- подготовить детальное обоснование ее создания, в том числе
- описание причин, по которым текущий список категорий
- недостаточен, а также список портов, переносимых в новую
- категорию.</para>
-
- <para>Прежде чем отправлять запрос, помните, что процесс потребует
- приложения немалых сил от многих участников, затронет всякого,
- кто поддерживает актуальное состояние дерева портов целиком, и,
- наконец, что подобные предложения неизбежно вызовут споры и
- расхождения во мнениях.</para>
-
- <!-- XXX change to url.ru.books after merging 5.3.4 -->
- <para>Обратитесь к разделу
- <link xlink:href="&url.books.porters-handbook;/makefile-categories.html#PROPOSING-CATEGORIES">
- Proposing a New Category</link> Руководства по созданию портов.
- После передачи PR группе &a.portmgr; решение о создании категории
- остается за ней. В случае утверждения новой категории кто-либо
- из &a.portmgr; делает следующее:</para>
-
- <procedure>
- <step>
- <para>Производит нужные репозиторные копирования.</para>
- </step>
-
- <step>
- <para>Обновляет определения <varname>VALID_CATEGORIES</varname>
- в файле <filename>ports/Mk/bsd.port.mk</filename>.
- </para>
- </step>
-
- <step>
- <para>Возвращает PR вам.</para>
- </step>
- </procedure>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Как устроен процесс?</para>
- </question>
-
- <answer>
- <para>Процедура является надстройкой над уже описанной процедурой
- репозиторного копирования отдельного порта.</para>
-
- <procedure>
- <step>
- <para>Обновите файлы <filename>Makefile</filename> для всех
- перенесенных портов. Пока не добавляйте новую категорию
- в процесс построения индекса.</para>
-
- <para>Для этого вам необходимо:</para>
- <procedure>
- <step>
- <para>Сменить для всех портов значение переменной
- <varname>CATEGORIES</varname> (это и было нашей
- целью, не правда ли?) Новая категория должна быть
- указано в списке <emphasis>первой</emphasis>, это
- поможет проверить, правильно ли установлена
- переменная <varname>PKGORIGIN</varname>.</para>
- </step>
-
- <step>
- <para>Выполните команду <command>make
- describe</command>. Поскольку процедура построения
- главного индекса <command>make index</command>,
- которую вам предстоит выполнить несколько позже,
- использует именно <command>make describe</command>,
- обнаружение ошибок сейчас сэкономит вам немало
- времени в будущем.</para>
- </step>
-
- <step>
- <para>Если вы хотите быть совсем честным, самое время
- запустить &man.portlint.1;.</para>
- </step>
- </procedure>
- </step>
-
- <step>
- <para>Проверьте корректность переменных
- <varname>PKGORIGIN</varname>. Система работы с портами
- использует значение переменной
- <varname>CATEGORIES</varname> для установки переменной
- <varname>PKGORIGIN</varname>, которая затем используется
- для связи установленных пакетов с каталогами дерева
- портов. Если эта связь установлена неправильно, перестанут
- правильно функционировать утилиты работы с портами, такие
- как &man.pkg.version.1; и &man.portupgrade.1;.</para>
-
- <para>Для проверки следует использовать скрипт
- <filename>chkorigin.sh</filename>: <command>env
- PORTSDIR=<replaceable>/path/to/ports</replaceable>
- sh -e <replaceable>/path/to/ports</replaceable>/Tools/scripts/chkorigin.sh
- </command>. Эта команда проверит
- <emphasis>каждый</emphasis> порт в дереве, в том числе и
- те, что не включены в процесс сборки, так что ее можно
- использовать сразу после репозиторного копирования.
- Совет: не забудьте проверить <varname>PKGORIGIN</varname>
- для зависимых от изменяемых вами портов!</para>
- </step>
-
- <step>
- <para>Протестируйте изменения локально, на вашей машине:
- закомментируйте строки <varname>SUBDIR</varname> для
- старых портов, затем разрешите обработку новой
- категории в файле <filename>ports/Makefile</filename>.
- Запустите <command>make checksubdirs</command> в
- затрагиваемых категориях. Наконец, выполните в каталоге
- <filename>ports/</filename> команду
- <command>make index</command>. Ее выполнение может занять
- до 40 минут даже на современной машине, однако, это
- необходимые затраты для того, чтобы не создать проблем
- для других.</para>
- </step>
-
- <step>
- <para>После завершения этой операции вы можете вносить в
- репозиторий изменения <filename>ports/Makefile</filename>
- для включения новой категории в процесс сборки, а также
- производить коммит изменений <filename>Makefile</filename>
- для старых категорий.</para>
- </step>
-
- <step>
- <para>Добавьте в файл <filename>CVSROOT-ports/modules</filename>
- строку
- <programlisting>ports_<replaceable>categoryname</replaceable>&nbsp;&nbsp;&nbsp;<replaceable>categoryname</replaceable></programlisting>
- </para>
-
- <para>Поля должны быть разделены табуляцией.</para>
-
- <para>Если <replaceable>categoryname</replaceable>
- содержит дефисы, замените их на подчеркивания.</para>
- </step>
-
- <step>
- <para>Поменяйте строки для затронутых модулей в файле
- <filename>CVSROOT-ports/modules</filename>.</para>
- </step>
-
- <step>
- <para>Добавьте нужные строки в файл
- <filename>ports/MOVED</filename>.</para>
- </step>
-
- <step>
- <para>Обновите инструкции для &man.cvsup.1;:</para>
-
- <itemizedlist>
- <listitem>
- <para>
- Добавьте категорию в файл
- <filename>distrib/cvsup/sup/README</filename>
- </para>
- </listitem>
-
- <listitem>
- <para>
- Добавьте в каталог
- <filename>distrib/cvsup/sup/ports-<replaceable>categoryname</replaceable></filename>
- два файла:
- <filename>list.cvs</filename> и
- <filename>releases</filename>.</para>
- </listitem>
-
- <listitem>
- <para>
- Добавьте категорию в файл
- <filename>src/share/examples/cvsup/ports-supfile</filename>
- </para>
- </listitem>
- </itemizedlist>
-
- <para>
- (Обратите внимание: эти
- файлы расположены в репозитории src, а не ports).
- Если вы не являетесь коммиттером src, вам потребуется
- создать PR.</para>
- </step>
-
- <step>
- <para>Обновите список категорий, используемый в &man.sysinstall.8;
- в <filename>src/usr.sbin/sysinstall</filename>.</para>
- </step>
-
- <step>
- <para>Обновите документацию:</para>
-
- <itemizedlist>
- <listitem>
- <para>
- <link xlink:href="&url.books.porters-handbook;/makefile-categories.html#PORTING-CATEGORIES">
- Руководство FreeBSD по созданию портов</link></para>
- </listitem>
-
- <listitem>
- <para>
- Файл <filename>www/en/ports/categories</filename>.
- Обратите внимание, что строки в них сгруппированы по
- категориям, описанным в файле
- <filename>www/en/ports/categories.descriptions</filename>.
- </para>
- </listitem>
-
- <listitem>
- <para>Раздел Руководства, перечисляющий
- <link xlink:href="&url.books.handbook;/cvsup.html#CVSUP-COLLEC">
- cvsup коллекции</link>.</para>
- </listitem>
- </itemizedlist>
- <para>(Внимание: все эти файлы находятся в репозитории
- документации. Если вы не являетесь коммиттером в этой области,
- создайте PR в категории документации (doc).</para>
- </step>
-
- <step>
- <para>Старые варианты портов могут быть удалены из
- репозитория только после того, как все описанные процедуры
- будут завершены, и никто не жалуется на новую структуру.</para>
- </step>
- </procedure>
-
- <para>Специально обновлять <link xlink:href="&url.base;/ports/index.html">веб-страницу портов</link>
- при добавлении новой категории не нужно: изменение файла
- <filename>www/en/ports/categories</filename> будет учтено при
- ежедневной перестройке списка портов
- (<filename>INDEX</filename>) автоматически.
- </para>
- </answer>
- </qandaentry>
- </qandadiv>
-
- <qandadiv>
- <title>Прочие вопросы</title>
-
- <qandaentry>
- <question>
- <para>Как мне проверить, что мой порт корректно собирается?</para>
- </question>
-
- <answer>
- <para>В первую очередь проверьте свой порт по адресу
- <uri xlink:href="http://pointyhat.FreeBSD.org/errorlogs/">http://pointyhat.FreeBSD.org/errorlogs/</uri>.
- Там вы найдете журналы сборки пакетов на всех поддерживаемых
- архитектурах для большинства последних ветвей разработки.</para>
-
- <para>Впрочем, отсутствие вашего порта среди журналов с ошибками
- еще не значит, что он успешно собирается (например, может не
- собираться один из зависимых портов). Необходимую информацию вы
- можете найти на машине <systemitem>pointyhat</systemitem> в каталогах
- <filename>/a/portbuild/&lt;arch&gt;/&lt;major_version&gt;</filename>.
- Каждая пара архитектуры и базовой версии содержит следующие
- подкаталоги:</para>
-
-<programlisting>errors журналы ошибок последней сборки версии &lt;major_version&gt; на платформе &lt;arch&gt;
-logs все журналы последней сборки версии &lt;major_version&gt; на платформе &lt;arch&gt;
-packages свежесобранные пакеты для версии &lt;major_version&gt; на платформе &lt;arch&gt;
-bak/errors журналы ошибок последней полной сборки версии &lt;major_version&gt; на платформе &lt;arch&gt;
-bak/logs все журналы последней полной сборки версии &lt;major_version&gt; на платформе &lt;arch&gt;
-bak/packages пакеты последней полной сборки версии &lt;major_version&gt; на платформе &lt;arch&gt;</programlisting>
-
- <para>Общее правило: пакет, присутствующий в каталоге
- <filename>packages</filename> или каталоге
- <filename>logs</filename>, и при этом отсутствующий в
- <filename>errors</filename>, собрался успешно. (Именно каталоги
- <filename>errors</filename> вы видите на веб-сервере
- <systemitem>pointyhat</systemitem>).</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Я добавил новый порт. Нужно ли добавлять его в файл
- <filename>INDEX</filename>?</para>
- </question>
-
- <answer>
- <para>Нет. <filename>INDEX</filename> больше не хранится
- в CVS репозитории. Данный файл может быть сгенерирован
- с помощью команды <command>make index</command> или
- уже сгенерированная версия может быть загружена с помощью
- <command>make fetchindex</command>.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Какие еще файлы я не должен трогать?</para>
- </question>
-
- <answer>
- <para>Любой файл в на верхнем уровне <filename>ports/</filename>,
- а также все файлы в каталогах, имена которых начинаются с
- прописной буквы (например, <filename>Mk/</filename>,
- <filename>Tools/</filename> и т.п.). В частности, упаси вас
- Бог трогать файлы <filename>ports/Mk/bsd.port*.mk</filename>,
- если вы не хотите привести порт-менеджеров в ярость!</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Каков корректный порядок обновления порта, когда его
- исходный архив поменялся, но не сменил имя?</para>
- </question>
-
- <answer>
- <para>При возникновении ситуации, когда автор обновляет
- дистрибутивный архив без изменения идентификатора версии,
- сообщение о коммите должно содержать аннотацию различий между
- предыдущим и обновленным состоянием архива, чтобы можно было
- убедиться, что архив не испорчен и не подменен злоумышленником.
- Если текущая версия порта существовала достаточное время, копии
- архива будут доступны на ftp-серверах проекта; в противном
- случае следует связаться с автором или мейнтейнером порта для
- выяснения причин замены архива.</para>
- </answer>
- </qandaentry>
- </qandadiv>
- </qandaset>
- </sect1>
-
- <sect1 xml:id="perks">
- <title>Пряники и прочие льготы</title>
-
- <para>Увы, льгот, возникающих от того, что вы являетесь коммиттером,
- не так уж много. Пожалуй, единственным несомненным долговременным
- преимуществом будет признание вас как компетентного специалиста.
- Тем не менее, кое-какие льготы все же существуют:</para>
-
- <variablelist>
-
- <varlistentry>
- <term>Прямой доступ к машине <systemitem>cvsup-master</systemitem></term>
-
- <listitem>
- <para>Будучи коммиттером, вы можете обратиться к &a.kuriyama.email;, чтобы
- получить доступ к машине
- <systemitem class="fqdomainname">cvsup-master.FreeBSD.org</systemitem>, приложив
- вывод команды <command>cvpasswd
- <replaceable>yourusername</replaceable>@FreeBSD.org
- freefall.FreeBSD.org</command>. Обратите внимание: в командной
- строке вы должны указать <systemitem>freefall.FreeBSD.org</systemitem>,
- хотя реальным сервером будет <systemitem>cvsup-master</systemitem>.
- Доступом к <systemitem>cvsup-master</systemitem> не следует злоупотреблять:
- это весьма загруженная машина.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term>Бесплатная подписка на комплект из 4 CD или DVD</term>
-
- <listitem>
- <para>Компания <link xlink:href="http://www.freebsdmall.com">FreeBSD Mall,
- Inc.</link> предоставляет для всех коммиттеров FreeBSD возможность
- бесплатной подписки на выпуски FreeBSD. Порядок подписки появляется
- в списке рассылки <email>developers@FreeBSD.org</email> после
- каждого релиза.</para>
- </listitem>
- </varlistentry>
-
- </variablelist>
- </sect1>
-
- <sect1 xml:id="misc">
- <title>Прочие вопросы</title>
-
- <qandaset>
- <qandaentry>
- <question>
- <para>Почему не следует вносить малозначимые изменения в ветви
- разработчика (vendor branches)?</para>
- </question>
-
- <answer>
- <itemizedlist>
- <listitem>
- <para>После этого действия каждый новый релиз от разработчика
- требует ручного приложения и объединения патчей.</para>
- </listitem>
-
- <listitem>
- <para>Что хуже, каждый новый релиз от разработчика требует
- ручной <emphasis>проверки</emphasis> приложенных патчей.</para>
- </listitem>
-
- <listitem>
- <para>Опция CVS <option>-j</option> не всегда хорошо работает.
- Можете спросить &a.obrien.email;, он расскажет вам жутких
- историй.</para>
- </listitem>
- </itemizedlist>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Как мне добавить файл в ветвь CVS?</para>
- </question>
-
- <answer>
- <para>Для добавления файла в ветви просто обновите исходные файлы
- до нужной ветви, а затем используйте команду
- <command>cvs add</command>. Например, если мы хотите перенести
- файл <filename>src/sys/alpha/include/smp.h</filename> из ветви
- HEAD в ветвь RELENG_6, в которой он пока не существует, можно
- использовать следующую последовательность действий:</para>
-
- <example>
- <title>MFC для нового файла</title>
-
- <screen>&prompt.user; <userinput>cd sys/alpha/include</userinput>
-&prompt.user; <userinput>cvs update -rRELENG_6</userinput>
-cvs update: Updating .
-U clockvar.h
-U console.h
-...
-&prompt.user; <userinput>cvs update -kk -Ap smp.h &gt; smp.h</userinput>
-===================================================================
-Checking out smp.h
-RCS: /usr/cvs/src/sys/alpha/include/smp.h,v
-VERS: 1.1
-***************
-&prompt.user; <userinput>cvs add smp.h</userinput>
-cvs add: scheduling file `smp.h' for addition on branch `RELENG_6'
-cvs add: use 'cvs commit' to add this file permanently
-&prompt.user; <userinput>cvs commit</userinput>
- </screen>
- </example>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Какую <quote>мета-информацию</quote> я должен включать в
- сообщения для коммита?</para>
- </question>
-
- <answer>
- <para>Помимо информативного описания содержания коммита вам может
- потребоваться включить в сообщение дополнительную
- информацию.</para>
-
- <para>Она состоит из одной или нескольких строк вида: ключевое слово
- или словосочетание, двоеточие, табуляции для форматирования,
- собственно дополнительная информация.</para>
-
- <para>Ключевыми словами могут быть:</para>
-
- <informaltable frame="none" pgwide="1">
- <tgroup cols="2">
- <tbody>
- <row>
- <entry><literal>PR:</literal></entry>
- <entry>Идентификатор сообщения об ошибке, затрагиваемого
- (как правило, закрываемого) данным коммитом.</entry>
- </row>
-
- <row>
- <entry><literal>Submitted by:</literal></entry>
- <entry>Имя и e-mail адрес приславшего исправление; для
- коммиттеров&nbsp;&mdash; просто имя пользователя в
- кластере FreeBSD.</entry>
- </row>
-
- <row>
- <entry><literal>Reviewed by:</literal></entry>
- <entry>Имя и e-mail адрес того или тех, кто рецензировал
- изменения; для коммиттеров&nbsp;&mdash; имя пользователя в
- кластере FreeBSD. Если изменения были посланы в список
- рассылки на рецензию и получили одобрение, имя списка
- рассылки.</entry>
- </row>
-
- <row>
- <entry><literal>Approved by:</literal></entry>
- <entry>Имя и e-mail адрес того или тех, кто одобрил
- изменение; как и прежде, для коммиттеров просто имя
- пользователя в кластере. Обычной практикой является
- получение одобрения для коммитов в новые для вас области
- дерева. Кроме того, в период перед каждым релизом все
- коммиты <emphasis>должны</emphasis> быть одобрены группой
- выпускающих инженеров. В случае ваших первых коммитов
- вы должны получить одобрение на них у вашего ментора, и
- упомянуть его в виде
- <quote><replaceable>username-of-mentor</replaceable>
- <literal>(mentor)</literal></quote>.
- </entry>
- </row>
-
- <row>
- <entry><literal>Obtained from:</literal></entry>
- <entry>Имя проекта, из исходного кода которого было взято
- изменение.</entry>
- </row>
-
- <row>
- <entry><literal>MFC after:</literal></entry>
-
- <entry>Если вы хотите получать по почте напоминания об
- <acronym>MFC</acronym>, укажите число дней, недель или
- месяцев с момента изначального коммита, через которое
- вы планируете произвести <acronym>MFC</acronym>.</entry>
- </row>
-
- <row>
- <entry><literal>Security:</literal></entry>
-
- <entry>Если ваши изменения затрагивают вопросы безопасности
- или исправляют какие-либо уязвимости, укажите ссылки на
- опубликованные отчеты или описание проблемы.</entry>
- </row>
- </tbody>
- </tgroup>
- </informaltable>
-
- <example>
- <title>Сообщение для коммита, основанного на PR</title>
-
- <para>Вы собираетесь внести коммит, основанный на PR, присланном
- John Smith и содержащим патч для исправления проблемы. Ваше
- сообщение должно заканчиваться примерно такими строками:</para>
-
- <programlisting>...
-
-PR: foo/12345
-Submitted by: John Smith &lt;John.Smith@example.com&gt;</programlisting>
- </example>
-
- <example>
- <title>Сообщение для коммита, требующего рецензии</title>
-
- <para>Вы собираетесь изменить подсистему работы с виртуальной
- памятью. Вы опубликовали предполагаемые изменения в
- соответствующем списке рассылки (в данном случае
- <literal>freebsd-arch</literal>), и изменения были
- одобрены.</para>
-
- <programlisting>...
-
-Reviewed by: -arch</programlisting>
- </example>
-
- <example>
- <title>Сообщение для коммита, требующего одобрения</title>
-
- <para>Вы намерены произвести коммит в область дерева, для которой
- определен ведущий (MAINTAINER). Вы скоординировали усилия с
- мейнтейнером, и он отреагировал <quote>Отлично. Производи
- коммит.</quote></para>
-
- <programlisting>...
-
-Approved by: <replaceable>abc</replaceable></programlisting>
-
- <para>Где <replaceable>abc</replaceable> имя пользователя,
- одобрившего ваш коммит.</para>
- </example>
-
- <example>
- <title>Сообщение для коммита, использующего код OpenBSD</title>
-
- <para>Вы собираетесь внести изменение, основанное на коде,
- использованном проектом OpenBSD.</para>
-
- <programlisting>...
-
-Obtained from: OpenBSD</programlisting>
- </example>
-
- <example>
- <title>Сообщение для коммита, планирующего интеграцию из
- &os.current; в &os.stable; через некоторое время</title>
-
- <para>Вы хотите внести изменения, которые должны быть интегрированы
- из &os.current; в ветвь &os.stable; через две недели.</para>
-
- <programlisting>...
-
-MFC after: <replaceable>2 weeks</replaceable></programlisting>
-
- <para>Где <replaceable>2</replaceable> является количеством дней,
- недель или месяцев, через которое вы планируете интегрировать
- (<acronym>MFC</acronym>) в &os.stable;. В качестве
- <replaceable>weeks</replaceable> может быть использовано
- <literal>week</literal>, <literal>weeks</literal>,
- <literal>month</literal>, <literal>months</literal>, либо
- этот параметр может быть опущен (при этом подразумевается
- <replaceable>X</replaceable> дней).</para>
- </example>
-
- <para>В отдельных случаях вам потребуется комбинировать приведенные
- примеры.</para>
-
- <para>Рассмотрим ситуацию, когда некто прислал сообщение об ошибке,
- содержащее код из проекта NetBSD. Вы заинтересовались этим
- случаем, но он расположен в той части дерева, в которой вы обычно
- не работаете, так что вы решаете выдать изменения на рассмотрение
- списка рассылки <literal>arch</literal>. Поскольку изменения были
- достаточно сложны, вы решаете интегрировать их
- (<acronym>MFC</acronym>) через месяц, чтобы обеспечить адекватное
- время для тестирования.</para>
-
- <para>В описанном случае сообщения для коммита может выглядеть
- примерно так:</para>
-
- <programlisting>PR: foo/54321
-Submitted by: John Smith &lt;John.Smith@example.com&gt;
-Reviewed by: -arch
-Obtained from: NetBSD
-MFC after: 1 month</programlisting>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Как мне получить доступ к <systemitem class="fqdomainname">people.FreeBSD.org</systemitem> для того чтобы разместить
- там персональную информацию или информацию о моих проектах?</para>
- </question>
-
- <answer>
- <para><systemitem class="fqdomainname">people.FreeBSD.org</systemitem>&nbsp;&mdash;
- синоним для <systemitem class="fqdomainname">freefall.FreeBSD.org</systemitem>.
- Просто создайте каталог <filename>public_html</filename>. Все,
- что вы разместите в нем, будет автоматически доступно по адресу
- <uri xlink:href="http://people.FreeBSD.org/">http://people.FreeBSD.org/</uri>.</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Где расположены архивы списков рассылки?</para>
- </question>
-
- <answer>
- <para>Списки рассылки архивируются в иерархию каталогов
- <filename>/g/mail</filename>, видимую на всех машинах кластера как
- <filename>/hub/g/mail</filename> (см. &man.pwd.1;).</para>
- </answer>
- </qandaentry>
-
- <qandaentry>
- <question>
- <para>Мне бы хотелось стать ментором для нового коммиттера. Какого
- технологического процесса я должен придерживаться?</para>
- </question>
-
- <answer>
- <para>Обратитесь к документу <link xlink:href="http://www.freebsd.org/internal/new-account.html">Процедура
- создания нового аккаунта</link>.</para>
- </answer>
- </qandaentry>
- </qandaset>
- </sect1>
-</article>