aboutsummaryrefslogtreecommitdiff
path: root/ru_RU.KOI8-R/books/porters-handbook/upgrading/chapter.xml
diff options
context:
space:
mode:
Diffstat (limited to 'ru_RU.KOI8-R/books/porters-handbook/upgrading/chapter.xml')
-rw-r--r--ru_RU.KOI8-R/books/porters-handbook/upgrading/chapter.xml300
1 files changed, 300 insertions, 0 deletions
diff --git a/ru_RU.KOI8-R/books/porters-handbook/upgrading/chapter.xml b/ru_RU.KOI8-R/books/porters-handbook/upgrading/chapter.xml
new file mode 100644
index 0000000000..7372064ce5
--- /dev/null
+++ b/ru_RU.KOI8-R/books/porters-handbook/upgrading/chapter.xml
@@ -0,0 +1,300 @@
+<?xml version="1.0" encoding="koi8-r"?>
+<!--
+ The FreeBSD Russian Documentation Project
+
+ $FreeBSD$
+
+ Original revision: r43840
+-->
+
+<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="port-upgrading">
+
+ <title>Обновление отдельного порта</title>
+
+ <para>Если вы заметите, что ваш порт устарел по сравнению с последней
+ авторской версией, первым делом вы должны получить самую
+ последнюю версия порта. Вы можете найти их в каталоге
+ <filename>ports/ports-current</filename> на зеркальных FTP-серверах &os;.
+ Однако если вы работаете с достаточно большим количеством портов,
+ наверное, будет проще использовать
+ <application>Subversion</application> или &man.portsnap.8; для
+ поддержания всей коллекции портов в актуальном состоянии, как это
+ описано в <link xlink:href="&url.books.handbook;/ports-using.html">
+ Руководстве</link>. К тому же это даст возможность отслеживать все
+ зависимости портов.</para>
+
+ <para>На следующем шаге необходимо выяснить, нет ожидает ли уже это
+ обновление своей очереди. Для этого у вас есть две возможности.
+ Существует интерфейс к <link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">базе
+ данных сообщений о проблемах FreeBSD (PR)</link> (известной также как
+ <literal>GNATS</literal>) с поисковыми возможностями. Выберите из
+ выпадающего списка <literal>ports</literal> и введите название
+ порта.</para>
+
+ <para>Однако иногда люди забывают поместить название порта в поле
+ Synopsis в точном виде. В таком случае вы можете воспользоваться
+ <link linkend="portsmon">Системой мониторинга портов &os;</link>
+ (которая известна также как
+ <literal>portsmon</literal>). В рамках этой системы делается попытка
+ классифицировать PR, касающиеся портов, по имени порта. Для поиска
+ PR, относящихся к определённому порту, используйте механизм <link xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Просмотра
+ по одному порту</link>.</para>
+
+ <para>Если таких отложенных PR не существует, то на следующем этапе
+ следует послать сообщение электронной почты человеку, поддерживающему
+ порт, который выдаётся по команде <command>make maintainer</command>.
+ Этот человек может уже работать над обновлением, или иметь
+ причину не обновлять порт прямо сейчас (например, из-за проблем со
+ стабильностью функционирования новой версии);
+ вам нет нужды дублировать их работу. Заметьте, что неподдерживаемые
+ порты перечисляются с адресом сопровождающего
+ <literal>ports@FreeBSD.org</literal>, который является всего лишь
+ адресом общего списка рассылки, так что отправка туда сообщений,
+ скорее всего, в данном случае не поможет.</para>
+
+ <para>Если сопровождающий просит вас выполнить обновление, либо
+ сопровождающий отсутствует, то у вас появляется шанс помочь &os;,
+ приготовив обновление самим! Пожалуйста, делайте это с использованием
+ команды &man.diff.1; в основной системе.</para>
+
+ <para>Чтобы создать подходящий <command>diff</command> для одного патча,
+ скопируйте файл, который нужно пропатчить, в
+ <replaceable>something.orig</replaceable>, сохраните ваши изменения в
+ <replaceable>something</replaceable>, а затем создайте ваше патч:</para>
+
+ <informalexample>
+ <screen>&prompt.user; <userinput>diff -u something.orig something &gt; something.diff</userinput></screen>
+ </informalexample>
+
+ <para>В противном случае, вам следует воспользоваться методом
+ <command>svn diff</command> (<xref linkend="svn-diff"/>), либо
+ скопировать содержимое порта в
+ отдельный каталог и применить результат рекурсивной команды &man.diff.1;
+ между новым и старым каталогами порта (например, если каталог с
+ модифицированным портом называется <filename>superedit</filename>,
+ а оригинальный, совпадающий с находящимся в нашем дереве портов,
+ <filename>superedit.bak</filename>, то сохраните результат выполнения
+ команды <command>diff -ruN superedit.bak superedit</command>).
+ Подойдёт как унифицированный, так и контекстный дифф, однако коммиттеры
+ портов обычно предпочитают унифицированный формат. Отметьте
+ использование опции <literal>-N</literal>&mdash;это одобряемый способ
+ заставить diff корректно работать в случае добавления новых файлов или
+ удаления старых. Перед тем, как посылать нам diff-файл, пожалуйста,
+ проверьте его, чтобы убедиться в значимости всех внесённых
+ изменений. (В частности, убедитесь, что вы очистили рабочие каталоги
+ командой <command>make clean</command>).</para>
+
+ <para>Для упрощения повторяющихся операций с файлами заплаток
+ вы можете воспользоваться скриптом
+ <filename>/usr/ports/Tools/scripts/patchtool.py</filename>. Перед тем,
+ как его запускать, пожалуйста, прочтите
+ <filename>/usr/ports/Tools/scripts/README.patchtool</filename>.</para>
+
+ <para>Если порт никем не поддерживается, а вы активно его используете,
+ пожалуйста, подумайте над тем, чтобы добровольно стать его
+ сопровождающим. Во &os; имеется более 4000 портов без поддержки, и это
+ как раз та область, где всегда нужны добровольцы. (Детальное описание
+ обязанностей сопровождающего можно найти в разделе в <link xlink:href="&url.books.developers-handbook;/policies.html#POLICIES-MAINTAINER">
+ Руководстве Разработчика</link>.)</para>
+
+ <para>Лучше всего послать нам diff-файл, включив его в посылку по команде
+ &man.send-pr.1; (категория <literal>ports</literal>). Если вы
+ сопровождаете порт,
+ обязательно поместите текст <literal>[maintainer update]</literal> в
+ начале строки описания и задайте в поле <quote>Class</quote>
+ вашего PR строчку <literal>maintainer-update</literal>.
+ В противном случае в поле <quote>Class</quote> вашего PR должно быть
+ указано <literal>change-request</literal>. Будьте добры, в сообщении
+ отметьте все добавленные или удалённые файлы, так как они будут
+ непосредственно указаны &man.svn.1; при выполнении операции коммита.
+ Если diff-файл имеет размер, превышающий 20КБ, сожмите его и обработайте
+ утилитой uuencode; в противном случае просто включите его как есть
+ в PR.</para>
+
+ <para>Прежде чем пользоваться &man.send-pr.1; просмотрите раздел
+ о <link xlink:href="&url.articles.problem-reports;/pr-writing.html">Написании
+ сообщений о проблемах</link> в статье о Сообщениях об ошибках. Он
+ содержит гораздо больше информации о том, как писать полезные сообщения
+ о проблемах.</para>
+
+ <important>
+ <para>Если обновление вызвано соображениями информационной
+ безопасности или наличием серьёзных ошибок в имеющемся порте,
+ пожалуйста, оповестите &a.portmgr; о необходимости немедленного
+ перепостроения и повторного распространения пакета данного порта.
+ В противном случае ничего не подозревающие пользователи
+ <command>pkg</command> будут продолжать устанавливать старую
+ версию по команде <command>pkg install</command> в течение
+ ещё нескольких недель.</para>
+ </important>
+
+ <note>
+ <para>Повторяем еще раз - для посылки обновлений существующих портов
+ используйте утилиту &man.diff.1;, а не &man.shar.1;! Это поможет
+ понять коммиттерам портов, что именно было изменено.</para>
+ </note>
+
+ <para>Теперь, когда вы проделали всё это, прочитайте о том, как
+ поддерживать актуальное состояние, в <xref linkend="keeping-up"/>.</para>
+
+ <sect1 xml:id="svn-diff">
+ <title>Использование <application>Subversion</application> для
+ создания патчей</title>
+
+ <para>По возможности присылайте исправления в формате &man.svn.1; diff.
+ В таком виде их проще использовать по сравнению с разницей между
+ <quote>старым и новым</quote> каталогами. Так проще
+ увидеть изменения и обновить их в случае, если что-нибудь
+ изменилось в Коллекции Портов с тех пор, как вы начали работу,
+ либо если коммиттер просит что-то исправить.</para>
+
+ <screen>&prompt.user; <userinput>cd ~/my_wrkdir</userinput> <co xml:id="my-wrkdir"/>
+&prompt.user; <userinput>svn co https://svn0.us-west.FreeBSD.org/ports/head/dns/pdnsd</userinput> <co xml:id="svn-FreeBSD-org"/>
+&prompt.user; <userinput>cd ~/my_wrkdir/pdnsd</userinput></screen>
+
+ <calloutlist>
+ <callout arearefs="my-wrkdir">
+ <para>Это может быть где угодно; место, в котором производится
+ построение портов, не привязано к
+ <filename>/usr/ports/</filename>.</para>
+ </callout>
+
+ <callout arearefs="svn-FreeBSD-org">
+ <para><link xlink:href="https://svn0.us-west.FreeBSD.org/">svn0.us-west.FreeBSD.org</link>
+ &mdash; это общедоступный сервер
+ <application>Subversion</application>.
+ Выберите ближайшее зеркало и проверьте сертификат
+ зеркалирующего сервера на наличие в перечне <link xlink:href="&url.books.handbook;/svn-mirrors.html">зеркалирующих
+ сайтов Subversion</link>.</para>
+ </callout>
+ </calloutlist>
+
+ <para>Находясь в рабочем каталоге, вносите любые изменения, которые
+ обычно делают для порта. При добавлении или удалении файла
+ используйте <command>svn</command> для отслеживания этих
+ изменений:</para>
+
+ <screen>&prompt.user; <userinput>svn add new_file</userinput>
+&prompt.user; <userinput>svn remove deleted_file</userinput></screen>
+
+ <para>Убедитесь, что вы проверяете порт в соответствии с рекомендуемым
+ порядком проверки, описанным в <xref linkend="porting-testing"/> и
+ <xref linkend="porting-portlint"/>.</para>
+
+ <screen>&prompt.user; <userinput>svn status</userinput>
+&prompt.user; <userinput>svn update</userinput> <co xml:id="svn-update"/></screen>
+
+ <calloutlist>
+ <callout arearefs="svn-update">
+ <para>Эта команда попытается выполнить слияние различий между
+ вашим патчем и текущей версией репозитория; внимательно проверьте
+ полученный вывод. Буква перед названием каждого файла означает
+ тип изменения, сделанного с этим файлом. Для получения полного
+ списка смотрите <xref linkend="table-svn-up"/>.</para>
+ </callout>
+ </calloutlist>
+
+ <table pgwide="1" frame="none" xml:id="table-svn-up">
+ <title>Префиксы файлов для <application>Subversion</application>
+ update</title>
+
+ <tgroup cols="2">
+ <tbody>
+ <row>
+ <entry>U</entry>
+
+ <entry>Файл обновлен без проблем.</entry>
+ </row>
+
+ <row>
+ <entry>G</entry>
+
+ <entry>Файл обновлен без проблем (вы увидите это только
+ при работе с удаленным репозиторием).</entry>
+ </row>
+
+ <row>
+ <entry>M</entry>
+
+ <entry>Файл с локальными изменениями, слияние выполнено
+ без конфликтов.</entry>
+ </row>
+
+ <row>
+ <entry>C</entry>
+
+ <entry>Файл с локальными изменениями, слияние выполнено
+ с конфликтами.</entry>
+ </row>
+ </tbody>
+ </tgroup>
+ </table>
+
+ <para>Если в результате выполнения <literal>svn update</literal>
+ отображается <literal>C</literal>, то это означает, что что-то
+ изменилось в репозитории <application>Subversion</application>
+ и &man.svn.1; не смогла выполнить
+ слияние локальных изменений с полученными из репозитория.
+ В любом случае никогда не помешает просмотреть изменения,
+ поскольку &man.svn.1; ничего не знает о том, каким должен быть
+ порт, поэтому эта команда может (и, вероятно, будет) делать
+ слияние тех изменений, которые не имеют смысла.</para>
+
+ <para>Последним шагом является создание унифицированного &man.diff.1;
+ для полученных изменений:</para>
+
+ <screen>&prompt.user; <userinput>svn diff &gt; ../`basename ${PWD}`.diff</userinput></screen>
+
+ <note>
+ <para>Информация о любых удаляемых файлов должна быть явным
+ образом указана в PR, поскольку необходимость в удалении
+ файла для коммиттера может быть неочевидна.</para>
+ </note>
+
+ <para>Присылайте свои патчи в соответствии с руководством, описанном в
+ <xref linkend="port-upgrading"/>.</para>
+ </sect1>
+
+ <sect1 xml:id="moved-and-updating-files">
+ <title>Файлы <filename>UPDATING</filename> и
+ <filename>MOVED</filename></title>
+
+ <para>Если при обновлении порта требуются специальные шаги, такие как
+ изменение файлов конфигурации или запуск специальной программы,
+ то вам следует это задокументировать в файле
+ <filename>/usr/ports/UPDATING</filename>. Формат записи в этом
+ файле приводится ниже:</para>
+
+ <programlisting>YYYYMMDD:
+ AFFECTS: users of portcategory/portname
+ AUTHOR: Your name &lt;Your email address&gt;
+
+ Special instructions</programlisting>
+
+ <para>Если вы включаете точные инструкции portmaster или portupgrading,
+ пожалуйста, убедитесь в правильном экранировании символов внутри
+ командной оболочки.</para>
+
+ <para>Файл <filename>/usr/ports/MOVED</filename> содержит записи
+ об удалённых или перемещённых портах. Каждая строка в этом
+ файле состоит из полей: название порта, место, куда он был
+ перемещён, дата и причина перемещения. Если порт был удалён,
+ то поле, указывающее новое место, может оставаться незаполненным.
+ Поля должны разделяться символом <literal>|</literal> (pipe),
+ как это показано ниже:</para>
+
+ <programlisting>old name|new name (blank for deleted)|date of move|reason</programlisting>
+
+ <para>Дату следует вводить в формате <literal>YYYY-MM-DD</literal>.
+ Новые записи следует добавлять в конец файла в хронологическом
+ порядке.</para>
+
+ <para>Если порт был перемещён, но в дальнейшем восстановлен на
+ прежнем месте, удалите в этом файле строку, содержащую
+ информацию о перемещении.</para>
+
+ <para>Полученные изменения можно проверить командой
+ <command>Tools/scripts/MOVEDlint.awk</command>.</para>
+ </sect1>
+ </chapter>
+