Whitespace fixes after PH split.
This commit is contained in:
parent
63c96f9f37
commit
8cc7166d97
Notes:
svn2git
2020-12-08 03:00:23 +00:00
svn path=/head/; revision=45256
17 changed files with 11401 additions and 11080 deletions
|
@ -7,67 +7,70 @@
|
|||
Original revision: r43844
|
||||
-->
|
||||
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="appendices">
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink=
|
||||
"http://www.w3.org/1999/xlink" version="5.0" xml:id="appendices">
|
||||
|
||||
<title>Приложения</title>
|
||||
<title>Приложения</title>
|
||||
|
||||
<sect1 xml:id="uses-values">
|
||||
<sect1 xml:id="uses-values">
|
||||
<title>Значения <varname>USES</varname></title>
|
||||
|
||||
<table>
|
||||
<title>úÎÁÞÅÎÉÑ <varname>USES</varname></title>
|
||||
|
||||
<table>
|
||||
<title>Значения <varname>USES</varname></title>
|
||||
<tgroup cols="3">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Наименование</entry>
|
||||
<entry>Аргументы</entry>
|
||||
<entry>Описание</entry>
|
||||
</row>
|
||||
</thead>
|
||||
|
||||
<tgroup cols="3">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Наименование</entry>
|
||||
<entry>Аргументы</entry>
|
||||
<entry>Описание</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody valign="top">
|
||||
&values.uses;
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</sect1>
|
||||
<tbody valign="top">
|
||||
&values.uses;
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="freebsd-versions">
|
||||
<sect1 xml:id="freebsd-versions">
|
||||
<title>Значения <literal>__FreeBSD_version</literal></title>
|
||||
|
||||
<para>Ниже для справки приводится перечень значений
|
||||
<literal>__FreeBSD_version</literal> в виде, который определён
|
||||
в <link
|
||||
xlink:href="http://svnweb.FreeBSD.org/base/head/sys/sys/param.h?view=markup">sys/param.h</link>:</para>
|
||||
|
||||
<table frame="none">
|
||||
<title>úÎÁÞÅÎÉÑ <literal>__FreeBSD_version</literal></title>
|
||||
|
||||
<para>Ниже для справки приводится перечень значений
|
||||
<literal>__FreeBSD_version</literal> в виде, который определён в
|
||||
<link xlink:href="http://svnweb.FreeBSD.org/base/head/sys/sys/param.h?view=markup">sys/param.h</link>:</para>
|
||||
<tgroup cols="3">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Значение</entry>
|
||||
<entry>Дата</entry>
|
||||
<entry>Релиз</entry>
|
||||
</row>
|
||||
</thead>
|
||||
|
||||
<table frame="none">
|
||||
<title>Значения <literal>__FreeBSD_version</literal></title>
|
||||
|
||||
<tgroup cols="3">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Значение</entry>
|
||||
<entry>Дата</entry>
|
||||
<entry>Релиз</entry>
|
||||
</row>
|
||||
</thead>
|
||||
|
||||
<tbody>
|
||||
&values.versions;
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<note>
|
||||
<para>Заметьте, что 2.2-STABLE иногда идентифицирует себя как
|
||||
<quote>2.2.5-STABLE</quote> после 2.2.5-RELEASE. Такой принцип
|
||||
использовался год и месяц, но мы решили изменить его на более
|
||||
однозначную систему нумерации старший/младший, начиная с версии
|
||||
2.2. Это объясняется тем, что параллельная разработка в нескольких
|
||||
ветках делает непрактичным идентификацию релизов просто по их
|
||||
реальным датам выпуска. Если вы сейчас делаете порт, вам не стоит
|
||||
заботиться о старых версиях -CURRENT; они перечислены здесь просто
|
||||
в информационных целях.</para>
|
||||
</note>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<tbody>
|
||||
&values.versions;
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<note>
|
||||
<para>Заметьте, что 2.2-STABLE иногда идентифицирует себя как
|
||||
<quote>2.2.5-STABLE</quote> после 2.2.5-RELEASE. Такой
|
||||
принцип использовался год и месяц, но мы решили изменить его
|
||||
на более однозначную систему нумерации старший/младший,
|
||||
начиная с версии 2.2. Это объясняется тем, что параллельная
|
||||
разработка в нескольких ветках делает непрактичным
|
||||
идентификацию релизов просто по их реальным датам выпуска.
|
||||
Если вы сейчас делаете порт, вам не стоит заботиться о старых
|
||||
версиях -CURRENT; они перечислены здесь просто в
|
||||
информационных целях.</para>
|
||||
</note>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
|
@ -7,149 +7,161 @@
|
|||
Original revision: r43840
|
||||
-->
|
||||
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="keeping-up">
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink=
|
||||
"http://www.w3.org/1999/xlink" version="5.0" xml:id="keeping-up">
|
||||
|
||||
<title>Актуализация</title>
|
||||
<title>Актуализация</title>
|
||||
|
||||
<para>Коллекция Портов &os; постоянно изменяется. Здесь находится
|
||||
некоторая информация о том, как поддерживать её в актуальном
|
||||
состоянии.</para>
|
||||
<para>Коллекция Портов &os; постоянно изменяется. Здесь находится
|
||||
некоторая информация о том, как поддерживать её в актуальном
|
||||
состоянии.</para>
|
||||
|
||||
<sect1 xml:id="freshports">
|
||||
<title>FreshPorts</title>
|
||||
<sect1 xml:id="freshports">
|
||||
<title>FreshPorts</title>
|
||||
|
||||
<para>Самым простым способом отслеживать уже произошедшие обновления
|
||||
является подписка на <link xlink:href="http://www.FreshPorts.org/">
|
||||
FreshPorts</link>. Для мониторинга вы можете выбрать несколько
|
||||
портов. Мейнтейнерам настоятельно рекомендуется подписаться здесь,
|
||||
потому что они будут получать уведомления не только о собственных
|
||||
изменениях, но и об изменениях, сделанных любым другим коммиттером
|
||||
&os;. (Это часто необходимо для синхронизации с изменениями на более
|
||||
низком технологическом уровне—хотя более корректным было бы
|
||||
получение предупреждений от тех, кто вносит подобные изменения,
|
||||
иногда этот этап пропускается или он просто непрактичен. Кроме того,
|
||||
в некоторых случаях изменения по своей природе весьма незначительны.
|
||||
Мы полагаем, что любой разработчик в таких ситуациях будет
|
||||
руководствоваться здравым смыслом).</para>
|
||||
<para>Самым простым способом отслеживать уже произошедшие
|
||||
обновления является подписка на <link xlink:href=
|
||||
"http://www.FreshPorts.org/">FreshPorts</link>. Для
|
||||
мониторинга вы можете выбрать несколько портов. Мейнтейнерам
|
||||
настоятельно рекомендуется подписаться здесь, потому что они
|
||||
будут получать уведомления не только о собственных изменениях,
|
||||
но и об изменениях, сделанных любым другим коммиттером &os;.
|
||||
(Это часто необходимо для синхронизации с изменениями на более
|
||||
низком технологическом уровне—хотя более корректным было
|
||||
бы получение предупреждений от тех, кто вносит подобные
|
||||
изменения, иногда этот этап пропускается или он просто
|
||||
непрактичен. Кроме того, в некоторых случаях изменения по
|
||||
своей природе весьма незначительны. Мы полагаем, что любой
|
||||
разработчик в таких ситуациях будет руководствоваться здравым
|
||||
смыслом).</para>
|
||||
|
||||
<para>Если вы хотите использовать FreshPorts, то вам нужна только
|
||||
учётная запись. Если регистрационный адрес вашей электронной почты
|
||||
будет иметь вид <literal>@FreeBSD.org</literal>, то справа на
|
||||
Web-страницах вы увидите дополнительную ссылку. Для тех из вас, кто
|
||||
уже получил учётную запись FreshPorts, но не использовал собственный
|
||||
адрес электронной почты <literal>@FreeBSD.org</literal>, достаточно
|
||||
сменить адрес на <literal>@FreeBSD.org</literal>, подписаться, а
|
||||
затем сменить его обратно.</para>
|
||||
<para>Если вы хотите использовать FreshPorts, то вам нужна только
|
||||
учётная запись. Если регистрационный адрес вашей электронной
|
||||
почты будет иметь вид <literal>@FreeBSD.org</literal>, то
|
||||
справа на Web-страницах вы увидите дополнительную ссылку. Для
|
||||
тех из вас, кто уже получил учётную запись FreshPorts, но не
|
||||
использовал собственный адрес электронной почты
|
||||
<literal>@FreeBSD.org</literal>, достаточно сменить адрес на
|
||||
<literal>@FreeBSD.org</literal>, подписаться, а затем сменить
|
||||
его обратно.</para>
|
||||
|
||||
<para>Во FreshPorts имеется также функция проверки правильности,
|
||||
которая автоматически проверяет каждое изменение, внесённое в дерево
|
||||
портов &os;. Если вы подпишетесь на эту услугу, то будете
|
||||
оповещаться обо всех ошибках, обнаруженных FreshPorts при проверке
|
||||
внесённых вами изменений.</para>
|
||||
</sect1>
|
||||
<para>Во FreshPorts имеется также функция проверки правильности,
|
||||
которая автоматически проверяет каждое изменение, внесённое в
|
||||
дерево портов &os;. Если вы подпишетесь на эту услугу, то
|
||||
будете оповещаться обо всех ошибках, обнаруженных FreshPorts
|
||||
при проверке внесённых вами изменений.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="svnweb">
|
||||
<title>Web-интерфейс к хранилищу исходных текстов</title>
|
||||
<sect1 xml:id="svnweb">
|
||||
<title>Web-интерфейс к хранилищу исходных текстов</title>
|
||||
|
||||
<para>Файлы в хранилище исходных текстов можно просматривать при помощи
|
||||
Web-интерфейса. Изменения, которые касаются в целом всей системы
|
||||
портов, теперь документируются в файле <link xlink:href="http://svnweb.FreeBSD.org/ports/head/CHANGES">CHANGES</link>.
|
||||
Изменения, касающиеся отдельных портов, отражаются теперь в
|
||||
файле <link xlink:href="http://svnweb.FreeBSD.org/ports/head/UPDATING">UPDATING</link>.
|
||||
Однако однозначный ответ на любой вопрос можно найти, только
|
||||
прочитав исходных код <link xlink:href="http://svnweb.FreeBSD.org/ports/head/Mk/bsd.port.mk">bsd.port.mk</link>
|
||||
и связанных с ним файлов.</para>
|
||||
</sect1>
|
||||
<para>Файлы в хранилище исходных текстов можно просматривать при
|
||||
помощи Web-интерфейса. Изменения, которые касаются в целом
|
||||
всей системы портов, теперь документируются в файле <link
|
||||
xlink:href="http://svnweb.FreeBSD.org/ports/head/CHANGES">CHANGES</link>.
|
||||
Изменения, касающиеся отдельных портов, отражаются теперь в
|
||||
файле <link
|
||||
xlink:href="http://svnweb.FreeBSD.org/ports/head/UPDATING">UPDATING</link>.
|
||||
Однако однозначный ответ на любой вопрос можно найти, только
|
||||
прочитав исходных код <link
|
||||
xlink:href="http://svnweb.FreeBSD.org/ports/head/Mk/bsd.port.mk">bsd.port.mk</link>
|
||||
и связанных с ним файлов.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="ports-mailing-list">
|
||||
<title>Список рассылки &os;, посвящённый портам</title>
|
||||
<sect1 xml:id="ports-mailing-list">
|
||||
<title>Список рассылки &os;, посвящённый портам</title>
|
||||
|
||||
<para>Если вы поддерживаете порты, то должны следить за &a.ports;.
|
||||
О важных изменениях, отражающихся на работе портов, будет сообщаться
|
||||
здесь, а затем они переносятся в <filename>CHANGES</filename>.</para>
|
||||
<para>Если вы поддерживаете порты, то должны следить за
|
||||
&a.ports;. О важных изменениях, отражающихся на работе портов,
|
||||
будет сообщаться здесь, а затем они переносятся в
|
||||
<filename>CHANGES</filename>.</para>
|
||||
|
||||
<para>Если данный список рассылки слишком загружен сообщениями,
|
||||
вы можете отслеживать &a.ports-announce.name;, который модерируется
|
||||
и не является местом для дискуссий.</para>
|
||||
</sect1>
|
||||
<para>Если данный список рассылки слишком загружен сообщениями,
|
||||
вы можете отслеживать &a.ports-announce.name;, который
|
||||
модерируется и не является местом для дискуссий.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="build-cluster">
|
||||
<title>Кластер построения портов &os;</title>
|
||||
<sect1 xml:id="build-cluster">
|
||||
<title>Кластер построения портов &os;</title>
|
||||
|
||||
<para>Одной из наименее известных сильных сторон &os; является тот
|
||||
факт, что для непрерывного построения Коллекции Портов для каждого
|
||||
из основных релизов ОС для каждой архитектуры уровня поддержки
|
||||
Tier-1 выделен целый кластер машин.</para>
|
||||
<para>Одной из наименее известных сильных сторон &os; является
|
||||
тот факт, что для непрерывного построения Коллекции Портов для
|
||||
каждого из основных релизов ОС для каждой архитектуры уровня
|
||||
поддержки Tier-1 выделен целый кластер машин.</para>
|
||||
|
||||
<para>Отдельные порты собираются, если они специально не помечены как
|
||||
<varname>IGNORE</varname>. Для портов, помеченных как
|
||||
<varname>BROKEN</varname>, попытки будут продолжены для того,
|
||||
чтобы увидеть, если основная проблема была решена. (Это сделано
|
||||
через использование переменной <varname>TRYBROKEN</varname> для
|
||||
<filename>Makefile</filename> порта.)</para>
|
||||
<para>Отдельные порты собираются, если они специально не помечены
|
||||
как <varname>IGNORE</varname>. Для портов, помеченных как
|
||||
<varname>BROKEN</varname>, попытки будут продолжены для того,
|
||||
чтобы увидеть, если основная проблема была решена. (Это
|
||||
сделано через использование переменной
|
||||
<varname>TRYBROKEN</varname> для <filename>Makefile</filename>
|
||||
порта.)</para>
|
||||
</sect1>
|
||||
|
||||
</sect1>
|
||||
<sect1 xml:id="distfile-survey">
|
||||
<title>Portscout: сканер дистрибутивных файлов портов
|
||||
&os;</title>
|
||||
|
||||
<sect1 xml:id="distfile-survey">
|
||||
<title>Portscout: сканер дистрибутивных файлов портов &os;</title>
|
||||
<para>Кластер построения выделен для выполнения самого последнего
|
||||
релиза каждого из портов, дистрибутивные файлы которых уже были
|
||||
сгружены. Однако из-за постоянных изменений в Internet
|
||||
дистрибутивные файлы могут быстро исчезать. <link
|
||||
xlink:href="http://portscout.FreeBSD.org">Portscout</link>,
|
||||
средство сканирования дистрибутивных файлов &os; пытается
|
||||
опросить каждый из сайтов, доступных для сгрузки каждого из
|
||||
портов, для определения того, доступны ли ещё дистрибутивные
|
||||
файлы. <application>Portscout</application> может готовить
|
||||
отчёты в <acronym>HTML</acronym> и рассылать электронные письма
|
||||
об имеющихся обновлениях для портов тем, кто это запрашивает.
|
||||
Мейнтейнеры периодически запрашивают наличие изменений, либо
|
||||
вручную, либо используя ленту <acronym>RSS</acronym>.</para>
|
||||
|
||||
<para>Кластер построения выделен для выполнения самого последнего
|
||||
релиза каждого из портов, дистрибутивные файлы которых уже были
|
||||
сгружены. Однако из-за постоянных изменений в Internet
|
||||
дистрибутивные файлы могут быстро исчезать. <link xlink:href="http://portscout.FreeBSD.org">Portscout</link>, средство
|
||||
сканирования дистрибутивных файлов &os; пытается опросить
|
||||
каждый из сайтов, доступных для сгрузки каждого из портов,
|
||||
для определения того, доступны ли ещё дистрибутивные файлы.
|
||||
<application>Portscout</application> может готовить отчёты
|
||||
в <acronym>HTML</acronym> и рассылать электронные письма об
|
||||
имеющихся обновлениях для портов тем, кто это запрашивает.
|
||||
Мейнтейнеры периодически запрашивают наличие изменений, либо
|
||||
вручную, либо используя ленту <acronym>RSS</acronym>.</para>
|
||||
<para>Главная страница <application>Portscout</application>
|
||||
отображает email мейнтейнера порта, количество портов, за
|
||||
которые ответственен мейнтейнер, количество портов с новыми
|
||||
дистрибутивными файлами и процент устаревших портов. Функция
|
||||
поиска выполняет поиск мейнтейнера по адресу электронной почты
|
||||
и позволяет выбирать между всеми портами или только
|
||||
устаревшими.</para>
|
||||
|
||||
<para>Главная страница <application>Portscout</application>
|
||||
отображает email мейнтейнера порта, количество портов, за
|
||||
которые ответственен мейнтейнер, количество портов с новыми
|
||||
дистрибутивными файлами и процент устаревших портов. Функция
|
||||
поиска выполняет поиск мейнтейнера по адресу электронной почты
|
||||
и позволяет выбирать между всеми портами или только
|
||||
устаревшими.</para>
|
||||
<para>При щелчке по адресу электронной почты мейнтейнера
|
||||
отображается список всех его портов, разделённых по категориям,
|
||||
вместе с текущим номером версии, информацией о наличии новой
|
||||
версии, временем последнего обновления порта и временем его
|
||||
последней проверки. Функция поиска на этой странице позволяет
|
||||
пользователю выполнять поиск конкретного порта.</para>
|
||||
|
||||
<para>При щелчке по адресу электронной почты мейнтейнера
|
||||
отображается список всех его портов, разделённых по категориям,
|
||||
вместе с текущим номером версии, информацией о наличии новой
|
||||
версии, временем последнего обновления порта и временем его
|
||||
последней проверки. Функция поиска на этой странице позволяет
|
||||
пользователю выполнять поиск конкретного порта.</para>
|
||||
<para>По щелчку на название порта в списке отображается информация
|
||||
о порте <link
|
||||
xlink:href="http://freshports.org">FreshPorts</link>.</para>
|
||||
</sect1>
|
||||
|
||||
<para>По щелчку на название порта в списке отображается информация
|
||||
о порте <link xlink:href="http://freshports.org">FreshPorts</link>.</para>
|
||||
</sect1>
|
||||
<sect1 xml:id="portsmon">
|
||||
<title>Система мониторинга портов &os;</title>
|
||||
|
||||
<sect1 xml:id="portsmon">
|
||||
<title>Система мониторинга портов &os;</title>
|
||||
<para>Другим полезным ресурсом является <link
|
||||
xlink:href="http://portsmon.FreeBSD.org">Система мониторинга
|
||||
портов &os;</link> (известная также как
|
||||
<literal>portsmon</literal>). Система представляет собой базу
|
||||
данных, обрабатывающую информацию из нескольких источников и
|
||||
позволяющую просматривать их при помощи Web-интерфейса. На
|
||||
данный момент задействованы база сообщений об ошибках (PR),
|
||||
протоколы ошибок кластера построения и отдельные файлы из
|
||||
коллекции портов. В будущем в этот список будет добавлена
|
||||
система проверки дистрибутивных файлов и другие ресурсы.</para>
|
||||
|
||||
<para>Другим полезным ресурсом является
|
||||
<link xlink:href="http://portsmon.FreeBSD.org">Система мониторинга
|
||||
портов &os;</link> (известная также как <literal>portsmon</literal>).
|
||||
Система представляет собой базу данных, обрабатывающую информацию из
|
||||
нескольких источников и позволяющую просматривать их при помощи
|
||||
Web-интерфейса. На данный момент задействованы база сообщений об
|
||||
ошибках (PR), протоколы ошибок кластера построения и отдельные файлы
|
||||
из коллекции портов. В будущем в этот список будет добавлена система
|
||||
проверки дистрибутивных файлов и другие ресурсы.</para>
|
||||
|
||||
<para>Для начала вы можете просмотреть всю информацию о некотором порте
|
||||
при помощи средства <link xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Обзор
|
||||
отдельного порта</link>.</para>
|
||||
|
||||
<para>На момент написания это единственный доступный ресурс, который
|
||||
для имени порта ставит в соответствие записи PR GNATS.
|
||||
(Отправители PR не всегда добавляют в название имя порта, хотя
|
||||
мы предпочитаем, чтобы они это делали.) Таким образом,
|
||||
<literal>portsmon</literal> это хорошее место для начала, если вы
|
||||
хотите найти присланные PR и/или ошибки построения для существующего
|
||||
порта; либо поискать, был ли уже прислан новый порт, который вы
|
||||
подумывали создать сами.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<para>Для начала вы можете просмотреть всю информацию о некотором
|
||||
порте при помощи средства <link
|
||||
xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Обзор
|
||||
отдельного порта</link>.</para>
|
||||
|
||||
<para>На момент написания это единственный доступный ресурс,
|
||||
который для имени порта ставит в соответствие записи PR GNATS.
|
||||
(Отправители PR не всегда добавляют в название имя порта, хотя
|
||||
мы предпочитаем, чтобы они это делали.) Таким образом,
|
||||
<literal>portsmon</literal> это хорошее место для начала, если
|
||||
вы хотите найти присланные PR и/или ошибки построения для
|
||||
существующего порта; либо поискать, был ли уже прислан новый
|
||||
порт, который вы подумывали создать сами.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -7,41 +7,46 @@
|
|||
Original revision: r43840
|
||||
-->
|
||||
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="own-port">
|
||||
<chapter xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
|
||||
xml:id="own-port">
|
||||
|
||||
<title>Как самому сделать новый порт</title>
|
||||
<title>Как самому сделать новый порт</title>
|
||||
|
||||
<para>Итак, вы интересуетесь, как создать собственный порт или
|
||||
обновить существующий? Великолепно!</para>
|
||||
<para>Итак, вы интересуетесь, как создать собственный порт или
|
||||
обновить существующий? Великолепно!</para>
|
||||
|
||||
<para>Ниже находятся некоторые указания по созданию нового порта для
|
||||
&os;. Если вы хотите обновить существующий порт, вы должны
|
||||
прочесть их, а затем <xref linkend="port-upgrading"/>.</para>
|
||||
<para>Ниже находятся некоторые указания по созданию нового порта
|
||||
для &os;. Если вы хотите обновить существующий порт, вы должны
|
||||
прочесть их, а затем <xref linkend="port-upgrading"/>.</para>
|
||||
|
||||
<para>Если этот документ недостаточно подробен, вы должны обратиться к
|
||||
файлу <filename>/usr/ports/Mk/bsd.port.mk</filename>, который
|
||||
включается в make-файл каждого порта. Он хорошо прокомментирован, и
|
||||
даже если вы не занимаетесь хакингом make-файлов каждодневно, из него
|
||||
вы сможете узнать много нового. Кроме того, конкретные вопросы можно
|
||||
задать, послав письмо на адрес &a.ports;.</para>
|
||||
<para>Если этот документ недостаточно подробен, вы должны
|
||||
обратиться к файлу
|
||||
<filename>/usr/ports/Mk/bsd.port.mk</filename>, который
|
||||
включается в make-файл каждого порта. Он хорошо
|
||||
прокомментирован, и даже если вы не занимаетесь хакингом
|
||||
make-файлов каждодневно, из него вы сможете узнать много нового.
|
||||
Кроме того, конкретные вопросы можно задать, послав письмо на
|
||||
адрес &a.ports;.</para>
|
||||
|
||||
<note>
|
||||
<para>Только часть переменных
|
||||
(<varname><replaceable>VAR</replaceable></varname>), которые могут быть
|
||||
переопределены, описаны в этом документе. Большинство (если не все)
|
||||
описаны в начале файла <filename>/usr/ports/Mk/bsd.port.mk</filename>;
|
||||
остальные, скорее всего, тоже там описаны. Заметьте, что
|
||||
в этом файле используется нестандартная настройка шага табуляции:
|
||||
<application>Emacs</application> и <application>Vim</application>
|
||||
должны распознать это при загрузке файла. Как &man.vi.1;,
|
||||
так и &man.ex.1; могут быть настроены на использование
|
||||
правильного значения выдачей команды <command>:set tabstop=4</command>
|
||||
после загрузки файла.</para>
|
||||
</note>
|
||||
|
||||
<para>
|
||||
Ищете, с чего бы начать попроще? Посмотрите на <link xlink:href="http://wiki.freebsd.org/WantedPorts">перечень запрошенных
|
||||
портов</link>, есть ли там такие, над которыми вы можете работать.
|
||||
</para>
|
||||
</chapter>
|
||||
<note>
|
||||
<para>Только часть переменных
|
||||
(<varname><replaceable>VAR</replaceable></varname>), которые
|
||||
могут быть переопределены, описаны в этом документе.
|
||||
Большинство (если не все) описаны в начале файла
|
||||
<filename>/usr/ports/Mk/bsd.port.mk</filename>; остальные,
|
||||
скорее всего, тоже там описаны. Заметьте, что в этом файле
|
||||
используется нестандартная настройка шага табуляции:
|
||||
<application>Emacs</application> и
|
||||
<application>Vim</application> должны распознать это при
|
||||
загрузке файла. Как &man.vi.1;, так и &man.ex.1; могут быть
|
||||
настроены на использование правильного значения выдачей команды
|
||||
<command>:set tabstop=4</command> после загрузки файла.</para>
|
||||
</note>
|
||||
|
||||
<para>
|
||||
Ищете, с чего бы начать попроще? Посмотрите на <link
|
||||
xlink:href="http://wiki.freebsd.org/WantedPorts">перечень
|
||||
запрошенных портов</link>, есть ли там такие, над которыми вы
|
||||
можете работать.</para>
|
||||
</chapter>
|
||||
|
|
|
@ -7,198 +7,207 @@
|
|||
Original revision: r43840
|
||||
-->
|
||||
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="pkg-files">
|
||||
<chapter xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
|
||||
xml:id="pkg-files">
|
||||
|
||||
<title>Файлы <filename>pkg-*</filename></title>
|
||||
<title>Файлы <filename>pkg-*</filename></title>
|
||||
|
||||
<para>åÓÔØ ÎÅÓËÏÌØËÏ ÐÒÉ£ÍÏ× ÒÁÂÏÔÙ Ó ÆÁÊÌÁÍÉ
|
||||
<filename>pkg-*</filename>, которые мы ещё не
|
||||
описали, но они иногда могут быть очень кстати.</para>
|
||||
<filename>pkg-*</filename>, которые мы ещё не описали, но они
|
||||
иногда могут быть очень кстати.</para>
|
||||
|
||||
<sect1 xml:id="porting-message">
|
||||
<title><filename>pkg-message</filename></title>
|
||||
<sect1 xml:id="porting-message">
|
||||
<title><filename>pkg-message</filename></title>
|
||||
|
||||
<para>Если вам нужно вывести сообщение для человека, устанавливающего
|
||||
приложение, то вы можете поместить сообщение в файл
|
||||
<filename>pkg-message</filename>. Эта возможность часто оказывается
|
||||
полезной для вывода дополнительных шагов установки, которые нужно
|
||||
предпринять после выполнения команды <command>pkg install</command>,
|
||||
или для вывода информации о лицензировании.</para>
|
||||
<para>Если вам нужно вывести сообщение для человека,
|
||||
устанавливающего приложение, то вы можете поместить сообщение в
|
||||
файл <filename>pkg-message</filename>. Эта возможность часто
|
||||
оказывается полезной для вывода дополнительных шагов установки,
|
||||
которые нужно предпринять после выполнения команды
|
||||
<command>pkg install</command>, или для вывода информации о
|
||||
лицензировании.</para>
|
||||
|
||||
<para>Если должны выводиться некоторые строки о knobs времени построения
|
||||
или предупреждения, используйте <varname>ECHO_MSG</varname>. Файл
|
||||
<filename>pkg-message</filename> только для послеустановочных шагов.
|
||||
Также следует иметь в виду различие между <varname>ECHO_MSG</varname>
|
||||
и <varname>ECHO_CMD</varname>. Первое предназначено для вывода на
|
||||
экран информационного текста, а второе для конвейера команд:</para>
|
||||
<para>Если должны выводиться некоторые строки о knobs времени
|
||||
построения или предупреждения, используйте
|
||||
<varname>ECHO_MSG</varname>. Файл
|
||||
<filename>pkg-message</filename> только для послеустановочных
|
||||
шагов. Также следует иметь в виду различие между
|
||||
<varname>ECHO_MSG</varname> и <varname>ECHO_CMD</varname>.
|
||||
Первое предназначено для вывода на экран информационного
|
||||
текста, а второе для конвейера команд:</para>
|
||||
|
||||
<programlisting>update-etc-shells:
|
||||
<programlisting>update-etc-shells:
|
||||
@${ECHO_MSG} "updating /etc/shells"
|
||||
@${CP} /etc/shells /etc/shells.bak
|
||||
@( ${GREP} -v ${PREFIX}/bin/bash /etc/shells.bak; \
|
||||
${ECHO_CMD} ${PREFIX}/bin/bash) >/etc/shells
|
||||
@${RM} /etc/shells.bak</programlisting>
|
||||
|
||||
<note>
|
||||
<para>Файл <filename>pkg-message</filename> не нужно добавлять в
|
||||
<filename>pkg-plist</filename>.</para>
|
||||
</note>
|
||||
</sect1>
|
||||
<note>
|
||||
<para>Файл <filename>pkg-message</filename> не нужно добавлять в
|
||||
<filename>pkg-plist</filename>.</para>
|
||||
</note>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="pkg-install">
|
||||
<title><filename>pkg-install</filename></title>
|
||||
<sect1 xml:id="pkg-install">
|
||||
<title><filename>pkg-install</filename></title>
|
||||
|
||||
<para>Если при установке бинарного пакета по команде
|
||||
<command>pkg add</command> или <command>pkg install</command>
|
||||
вашему порту нужно выполнить какие-то команды, то вы можете
|
||||
это сделать с помощью скрипта <filename>pkg-install</filename>.
|
||||
Этот скрипт будет автоматически добавлен к пакету и будет
|
||||
дважды запускаться командой <command>pkg</command>: первый раз
|
||||
в виде <literal>${SH} pkg-install ${PKGNAME}
|
||||
PRE-INSTALL</literal>, а второй раз как
|
||||
<literal>${SH} {PKGNAME} POST-INSTALL</literal>.
|
||||
Для распознавания того, в каком режиме запущен скрипт, можно
|
||||
использовать параметр <literal>$2</literal>. Переменная
|
||||
окружения <envar>PKG_PREFIX</envar> будет принимать значение,
|
||||
соответствующее каталогу, в который устанавливается пакет.</para>
|
||||
<para>Если при установке бинарного пакета по команде
|
||||
<command>pkg add</command> или <command>pkg install</command>
|
||||
вашему порту нужно выполнить какие-то команды, то вы можете это
|
||||
сделать с помощью скрипта <filename>pkg-install</filename>.
|
||||
Этот скрипт будет автоматически добавлен к пакету и будет
|
||||
дважды запускаться командой <command>pkg</command>: первый раз
|
||||
в виде <literal>${SH} pkg-install ${PKGNAME}
|
||||
PRE-INSTALL</literal>, а второй раз как
|
||||
<literal>${SH} {PKGNAME} POST-INSTALL</literal>. Для
|
||||
распознавания того, в каком режиме запущен скрипт, можно
|
||||
использовать параметр <literal>$2</literal>. Переменная
|
||||
окружения <envar>PKG_PREFIX</envar> будет принимать значение,
|
||||
соответствующее каталогу, в который устанавливается
|
||||
пакет.</para>
|
||||
|
||||
<note>
|
||||
<para>Этот скрипт не запускается автоматически, если вы
|
||||
устанавливаете порт командой <command>make install</command>.
|
||||
Если же вам действительно необходимо его запустить, то запустите
|
||||
его явно из файла <filename>Makefile</filename> порта строкой
|
||||
вида <literal>PKG_PREFIX=${PREFIX} ${SH} $
|
||||
{PKGINSTALL}${PKGNAME} PRE-INSTALL</literal>.</para>
|
||||
</note>
|
||||
</sect1>
|
||||
<note>
|
||||
<para>Этот скрипт не запускается автоматически, если вы
|
||||
устанавливаете порт командой <command>make install</command>.
|
||||
Если же вам действительно необходимо его запустить, то
|
||||
запустите его явно из файла <filename>Makefile</filename>
|
||||
порта строкой вида <literal>PKG_PREFIX=${PREFIX}
|
||||
${SH} $ {PKGINSTALL}${PKGNAME}
|
||||
PRE-INSTALL</literal>.</para>
|
||||
</note>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="pkg-deinstall">
|
||||
<title><filename>pkg-deinstall</filename></title>
|
||||
<sect1 xml:id="pkg-deinstall">
|
||||
<title><filename>pkg-deinstall</filename></title>
|
||||
|
||||
<para>Этот скрипт вызывается при удалении пакета.</para>
|
||||
<para>Этот скрипт вызывается при удалении пакета.</para>
|
||||
|
||||
<para>Этот скрипт будет дважды запускаться командой
|
||||
<command>pkg delete</command>.
|
||||
Первый раз как <literal>${SH} pkg-deinstall
|
||||
${PKGNAME} DEINSTALL</literal>, а второй раз как
|
||||
<literal>${SH} pkg-deinstall ${PKGNAME}
|
||||
POST-DEINSTALL</literal>.</para>
|
||||
</sect1>
|
||||
<para>Этот скрипт будет дважды запускаться командой
|
||||
<command>pkg delete</command>. Первый раз как
|
||||
<literal>${SH} pkg-deinstall ${PKGNAME}
|
||||
DEINSTALL</literal>, а второй раз как <literal>${SH}
|
||||
pkg-deinstall ${PKGNAME}
|
||||
POST-DEINSTALL</literal>.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="pkg-names">
|
||||
<title xml:id="porting-pkgfiles">Изменение имён файлов
|
||||
<filename>pkg-*</filename></title>
|
||||
<sect1 xml:id="pkg-names">
|
||||
<title xml:id="porting-pkgfiles">Изменение имён файлов
|
||||
<filename>pkg-*</filename></title>
|
||||
|
||||
<para>Все имена файлов
|
||||
<filename>pkg-*</filename>
|
||||
определяются с помощью переменных, так что вы можете изменить их,
|
||||
если это нужно, в вашем файле <filename>Makefile</filename>. Это
|
||||
особенно полезно, если вы используете одни и те же файлы
|
||||
<filename>pkg-*</filename>
|
||||
совместно между несколькими портами или
|
||||
пишете в один из вышеперечисленных файлов (в главе о <link linkend="porting-wrkdir">записи в каталоги, отличные от
|
||||
<varname>WRKDIR</varname></link> объяснено, почему не рекомендуется
|
||||
осуществлять запись непосредственно в файлы
|
||||
<filename>pkg-*</filename>.</para>
|
||||
<para>Все имена файлов <filename>pkg-*</filename> определяются с
|
||||
помощью переменных, так что вы можете изменить их, если это
|
||||
нужно, в вашем файле <filename>Makefile</filename>. Это
|
||||
особенно полезно, если вы используете одни и те же файлы
|
||||
<filename>pkg-*</filename> совместно между несколькими портами
|
||||
или пишете в один из вышеперечисленных файлов (в главе о <link
|
||||
linkend="porting-wrkdir">записи в каталоги, отличные от
|
||||
<varname>WRKDIR</varname></link> объяснено, почему не
|
||||
рекомендуется осуществлять запись непосредственно в файлы
|
||||
<filename>pkg-*</filename>.</para>
|
||||
|
||||
<para>Вот список имён переменных и их значений по умолчанию. (Значение
|
||||
<varname>PKGDIR</varname> по умолчанию равно
|
||||
<varname>${MASTERDIR}</varname>.)</para>
|
||||
<para>Вот список имён переменных и их значений по умолчанию.
|
||||
(Значение <varname>PKGDIR</varname> по умолчанию равно
|
||||
<varname>${MASTERDIR}</varname>.)</para>
|
||||
|
||||
<informaltable frame="none" pgwide="0">
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Переменная</entry>
|
||||
<informaltable frame="none" pgwide="0">
|
||||
<tgroup cols="2">
|
||||
<thead>
|
||||
<row>
|
||||
<entry>Переменная</entry>
|
||||
<entry>Значение по умолчанию</entry>
|
||||
</row>
|
||||
</thead>
|
||||
|
||||
<entry>Значение по умолчанию</entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row>
|
||||
<entry><varname>DESCR</varname></entry>
|
||||
<entry><literal>${PKGDIR}/pkg-descr</literal></entry>
|
||||
</row>
|
||||
|
||||
<tbody>
|
||||
<row>
|
||||
<entry><varname>DESCR</varname></entry>
|
||||
<entry><literal>${PKGDIR}/pkg-descr</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><varname>PLIST</varname></entry>
|
||||
<entry><literal>${PKGDIR}/pkg-plist</literal></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><varname>PLIST</varname></entry>
|
||||
<entry><literal>${PKGDIR}/pkg-plist</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><varname>PKGINSTALL</varname></entry>
|
||||
<entry><literal>${PKGDIR}/pkg-install</literal></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><varname>PKGINSTALL</varname></entry>
|
||||
<entry><literal>${PKGDIR}/pkg-install</literal></entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry><varname>PKGDEINSTALL</varname></entry>
|
||||
<entry><literal>${PKGDIR}/pkg-deinstall</literal></entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry><varname>PKGMESSAGE</varname></entry>
|
||||
<entry><literal>${PKGDIR}/pkg-message</literal></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
<row>
|
||||
<entry><varname>PKGMESSAGE</varname></entry>
|
||||
<entry><literal>${PKGDIR}/pkg-message</literal></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
|
||||
<para>Пожалуйста, изменяйте значения этих переменных, а не
|
||||
переопределяйте <varname>PKG_ARGS</varname>. Если вы измените
|
||||
значение переменных <varname>PKG_ARGS</varname>, то эти файлы при
|
||||
установке из порта будут установлены в каталог
|
||||
<filename>/var/db/pkg</filename> некорректно.</para>
|
||||
</sect1>
|
||||
<para>Пожалуйста, изменяйте значения этих переменных, а не
|
||||
переопределяйте <varname>PKG_ARGS</varname>. Если вы измените
|
||||
значение переменных <varname>PKG_ARGS</varname>, то эти файлы
|
||||
при установке из порта будут установлены в каталог
|
||||
<filename>/var/db/pkg</filename> некорректно.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="using-sub-files">
|
||||
<title>Использование <varname>SUB_FILES</varname> и
|
||||
<varname>SUB_LIST</varname></title>
|
||||
<sect1 xml:id="using-sub-files">
|
||||
<title>Использование <varname>SUB_FILES</varname> и
|
||||
<varname>SUB_LIST</varname></title>
|
||||
|
||||
<para>Переменные <varname>SUB_FILES</varname> и
|
||||
<varname>SUB_LIST</varname> подходят для задания в файлах порта
|
||||
динамических значений, таких как <varname>PREFIX</varname> установки
|
||||
в <filename>pkg-message</filename>.</para>
|
||||
<para>Переменные <varname>SUB_FILES</varname> и
|
||||
<varname>SUB_LIST</varname> подходят для задания в файлах порта
|
||||
динамических значений, таких как <varname>PREFIX</varname>
|
||||
установки в <filename>pkg-message</filename>.</para>
|
||||
|
||||
<para>В переменной <varname>SUB_FILES</varname> указывается перечень
|
||||
файлов для автоматического изменения. Каждый
|
||||
<replaceable>file</replaceable> из перечня <varname>SUB_FILES</varname>
|
||||
обязан иметь соответствующий
|
||||
<filename>file.in</filename>,
|
||||
присутствующий в <varname>FILESDIR</varname>. Измененная версия
|
||||
будет создана в <varname>WRKDIR</varname>. Файлы, определенные в
|
||||
качестве значения <varname>USE_RC_SUBR</varname> (или устаревшего
|
||||
<varname>USE_RCORDER</varname>), автоматически добавляются в
|
||||
<varname>SUB_FILES</varname>. Для файлов
|
||||
<filename>pkg-message</filename>, <filename>pkg-install</filename>
|
||||
и <filename>pkg-deinstall</filename>
|
||||
устанавливается соответствующая переменная Makefile, указывающая на
|
||||
обработанную версию.</para>
|
||||
<para>В переменной <varname>SUB_FILES</varname> указывается
|
||||
перечень файлов для автоматического изменения. Каждый
|
||||
<replaceable>file</replaceable> из перечня
|
||||
<varname>SUB_FILES</varname> обязан иметь соответствующий
|
||||
<filename>file.in</filename>, присутствующий в
|
||||
<varname>FILESDIR</varname>. Измененная версия будет создана в
|
||||
<varname>WRKDIR</varname>. Файлы, определенные в качестве
|
||||
значения <varname>USE_RC_SUBR</varname> (или устаревшего
|
||||
<varname>USE_RCORDER</varname>), автоматически добавляются в
|
||||
<varname>SUB_FILES</varname>. Для файлов
|
||||
<filename>pkg-message</filename>,
|
||||
<filename>pkg-install</filename> и
|
||||
<filename>pkg-deinstall</filename> устанавливается
|
||||
соответствующая переменная Makefile, указывающая на
|
||||
обработанную версию.</para>
|
||||
|
||||
<para>Переменная <varname>SUB_LIST</varname> содержит перечень пар
|
||||
<literal>VAR=VALUE</literal>. В каждом файле из
|
||||
<varname>SUB_FILES</varname> для каждой пары будет произведена
|
||||
замена <literal>%%VAR%%</literal> на <literal>VALUE</literal>.
|
||||
Некоторые общие пары определяются автоматически:
|
||||
<varname>PREFIX</varname>, <varname>LOCALBASE</varname>,
|
||||
<varname>DATADIR</varname>,
|
||||
<varname>DOCSDIR</varname>, <varname>EXAMPLESDIR</varname>,
|
||||
<varname>WWWDIR</varname> и <varname>ETCDIR</varname>.
|
||||
Любая строка, начинающаяся с <literal>@comment</literal>, будет
|
||||
удалена из конечного файла после подстановки переменной.</para>
|
||||
<para>Переменная <varname>SUB_LIST</varname> содержит перечень
|
||||
пар <literal>VAR=VALUE</literal>. В каждом файле из
|
||||
<varname>SUB_FILES</varname> для каждой пары будет произведена
|
||||
замена <literal>%%VAR%%</literal> на <literal>VALUE</literal>.
|
||||
Некоторые общие пары определяются автоматически:
|
||||
<varname>PREFIX</varname>, <varname>LOCALBASE</varname>,
|
||||
<varname>DATADIR</varname>, <varname>DOCSDIR</varname>,
|
||||
<varname>EXAMPLESDIR</varname>, <varname>WWWDIR</varname> и
|
||||
<varname>ETCDIR</varname>. Любая строка, начинающаяся с
|
||||
<literal>@comment</literal>, будет удалена из конечного файла
|
||||
после подстановки переменной.</para>
|
||||
|
||||
<para>В следующем примере в <filename>pkg-message</filename>
|
||||
будет сделана замена <literal>%%ARCH%%</literal> на системную
|
||||
архитектуру:</para>
|
||||
<para>В следующем примере в <filename>pkg-message</filename>
|
||||
будет сделана замена <literal>%%ARCH%%</literal> на системную
|
||||
архитектуру:</para>
|
||||
|
||||
<programlisting>SUB_FILES= pkg-message
|
||||
SUB_LIST= ARCH=${ARCH}</programlisting>
|
||||
<programlisting>SUB_FILES= pkg-message
|
||||
SUB_LIST= ARCH=${ARCH}</programlisting>
|
||||
|
||||
<para>Обратите внимание, что в этом примере в <varname>FILESDIR</varname>
|
||||
обязательно существование файла <filename>pkg-message.in</filename>.
|
||||
</para>
|
||||
<para>Обратите внимание, что в этом примере в
|
||||
<varname>FILESDIR</varname> обязательно существование файла
|
||||
<filename>pkg-message.in</filename>.</para>
|
||||
|
||||
<para>Пример хорошего <filename>pkg-message.in</filename>:</para>
|
||||
<para>Пример хорошего <filename>pkg-message.in</filename>:</para>
|
||||
|
||||
<programlisting>Now it's time to configure this package.
|
||||
<programlisting>Now it is time to configure this package.
|
||||
Copy %%PREFIX%%/share/examples/putsy/%%ARCH%%.conf into your home directory
|
||||
as .putsy.conf and edit it.</programlisting>
|
||||
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
|
@ -7,278 +7,292 @@
|
|||
Original revision: r43840
|
||||
-->
|
||||
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="plist">
|
||||
<chapter xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
|
||||
xml:id="plist">
|
||||
|
||||
<title>Продвинутые практики <filename>pkg-plist</filename></title>
|
||||
<sect1 xml:id="plist-sub">
|
||||
<title>Изменение содержимого <filename>pkg-plist</filename> в зависимости
|
||||
от make-переменных</title>
|
||||
<title>Продвинутые практики <filename>pkg-plist</filename></title>
|
||||
|
||||
<para>Некоторые порты, в частности, порты <literal>p5-</literal>, должны
|
||||
менять содержимое своих файлов <filename>pkg-plist</filename> в
|
||||
зависимости от того, с какими параметрами они были отконфигурированы
|
||||
(или в зависимости от версии языка <literal>perl</literal> в случае
|
||||
портов <literal>p5-</literal>). Чтобы облегчить этот
|
||||
процесс, любые вхождения ключевых слов <literal>%%OSREL%%</literal>,
|
||||
<literal>%%PERL_VER%%</literal> и <literal>%%PERL_VERSION%%</literal>
|
||||
в файле <filename>pkg-plist</filename> будут заменяться соответствующими
|
||||
значениями. Значением <literal>%%OSREL%%</literal> является номер
|
||||
версии операционной системы (например, <literal>4.9</literal>).
|
||||
<literal>%%PERL_VERSION%%</literal> и <literal>%%PERL_VER%%</literal>
|
||||
обозначают полный номер версии <command>perl</command> (например,
|
||||
<literal>5.8.9</literal>). Некоторые
|
||||
другие <literal>%%VARS%%</literal>, имеющие
|
||||
отношение к файлам документации порта, описаны в <link linkend="install-documentation">соответствующем разделе</link>.</para>
|
||||
<sect1 xml:id="plist-sub">
|
||||
<title>Изменение содержимого <filename>pkg-plist</filename> в
|
||||
зависимости от make-переменных</title>
|
||||
|
||||
<para>Если вам нужно сделать другие подстановки, вы можете указать в
|
||||
переменной <varname>PLIST_SUB</varname> список пар
|
||||
<literal>VAR=VALUE</literal>,
|
||||
и все вхождения <literal>%%VAR%%</literal>
|
||||
в файле <filename>pkg-plist</filename> будут заменяться на значение
|
||||
<replaceable>VALUE</replaceable>.</para>
|
||||
<para>Некоторые порты, в частности, порты <literal>p5-</literal>,
|
||||
должны менять содержимое своих файлов
|
||||
<filename>pkg-plist</filename> в зависимости от того, с какими
|
||||
параметрами они были отконфигурированы (или в зависимости от
|
||||
версии языка <literal>perl</literal> в случае портов
|
||||
<literal>p5-</literal>). Чтобы облегчить этот процесс, любые
|
||||
вхождения ключевых слов <literal>%%OSREL%%</literal>,
|
||||
<literal>%%PERL_VER%%</literal> и
|
||||
<literal>%%PERL_VERSION%%</literal> в файле
|
||||
<filename>pkg-plist</filename> будут заменяться
|
||||
соответствующими значениями. Значением
|
||||
<literal>%%OSREL%%</literal> является номер версии операционной
|
||||
системы (например, <literal>4.9</literal>).
|
||||
<literal>%%PERL_VERSION%%</literal> и
|
||||
<literal>%%PERL_VER%%</literal> обозначают полный номер версии
|
||||
<command>perl</command> (например, <literal>5.8.9</literal>).
|
||||
Некоторые другие <literal>%%VARS%%</literal>, имеющие отношение
|
||||
к файлам документации порта, описаны в <link
|
||||
linkend="install-documentation">соответствующем
|
||||
разделе</link>.</para>
|
||||
|
||||
<para>Например, если у вас имеется порт, который устанавливает много
|
||||
файлов в каталог, зависящий от версии, вы можете задать нечто
|
||||
типа</para>
|
||||
<para>Если вам нужно сделать другие подстановки, вы можете
|
||||
указать в переменной <varname>PLIST_SUB</varname> список пар
|
||||
<literal>VAR=VALUE</literal>, и все вхождения
|
||||
<literal>%%VAR%%</literal> в файле
|
||||
<filename>pkg-plist</filename> будут заменяться на значение
|
||||
<replaceable>VALUE</replaceable>.</para>
|
||||
|
||||
<programlisting>OCTAVE_VERSION= 2.0.13
|
||||
<para>Например, если у вас имеется порт, который устанавливает
|
||||
много файлов в каталог, зависящий от версии, вы можете задать
|
||||
нечто типа</para>
|
||||
|
||||
<programlisting>OCTAVE_VERSION= 2.0.13
|
||||
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}</programlisting>
|
||||
|
||||
<para>в файле <filename>Makefile</filename> и использовать
|
||||
<literal>%%OCTAVE_VERSION%%</literal> везде, где нужно указать
|
||||
номер версии в файле <filename>pkg-plist</filename>. Таким образом,
|
||||
при обновлении порта вам не нужно будет менять десятки (а в некоторых
|
||||
случаях и сотни) строк в файле <filename>pkg-plist</filename>.</para>
|
||||
<para>в файле <filename>Makefile</filename> и использовать
|
||||
<literal>%%OCTAVE_VERSION%%</literal> везде, где нужно указать
|
||||
номер версии в файле <filename>pkg-plist</filename>. Таким
|
||||
образом, при обновлении порта вам не нужно будет менять десятки
|
||||
(а в некоторых случаях и сотни) строк в файле
|
||||
<filename>pkg-plist</filename>.</para>
|
||||
|
||||
<para>Если ваш порт устанавливает файлы в соответствии с установленными
|
||||
в порту опциями, то обычным способом управления является добавление
|
||||
префиксов <literal>%%TAG%%</literal> для строк
|
||||
<filename>pkg-plist</filename> с добавлением этого
|
||||
<literal>TAG</literal> в переменную <varname>PLIST_SUB</varname>
|
||||
внутри <filename>Makefile</filename> со специальным значением
|
||||
<literal>@comment</literal>, которое указывает пакетным инструментам
|
||||
игнорировать эти строки:</para>
|
||||
<para>Если ваш порт устанавливает файлы в соответствии с
|
||||
установленными в порту опциями, то обычным способом управления
|
||||
является добавление префиксов <literal>%%TAG%%</literal> для
|
||||
строк <filename>pkg-plist</filename> с добавлением этого
|
||||
<literal>TAG</literal> в переменную
|
||||
<varname>PLIST_SUB</varname> внутри
|
||||
<filename>Makefile</filename> со специальным значением
|
||||
<literal>@comment</literal>, которое указывает пакетным
|
||||
инструментам игнорировать эти строки:</para>
|
||||
|
||||
<programlisting>.if defined(WITH_X11)
|
||||
<programlisting>.if defined(WITH_X11)
|
||||
PLIST_SUB+= X11=""
|
||||
.else
|
||||
PLIST_SUB+= X11="@comment "
|
||||
.endif</programlisting>
|
||||
|
||||
<para>и в самом <filename>pkg-plist</filename>:</para>
|
||||
<para>и в самом <filename>pkg-plist</filename>:</para>
|
||||
|
||||
<programlisting>%%X11%%bin/foo-gui</programlisting>
|
||||
<programlisting>%%X11%%bin/foo-gui</programlisting>
|
||||
|
||||
<para>Эта подстановка будет сделана
|
||||
между выполнением целей <buildtarget>pre-install</buildtarget> и
|
||||
<buildtarget>do-install</buildtarget>, посредством чтения файла
|
||||
<filename>PLIST</filename> и записью в файл
|
||||
<filename>TMPPLIST</filename>
|
||||
(по умолчанию это файл
|
||||
<filename>WRKDIR/.PLIST.mktmp</filename>). Так
|
||||
что если ваш порт строит <filename>PLIST</filename> на лету, делайте
|
||||
это во время или до выполнения цели
|
||||
<buildtarget>pre-install</buildtarget>. Кроме того, если вашему порту
|
||||
требуется отредактировать получающийся файл, делайте это в цели
|
||||
<buildtarget>post-install</buildtarget> изменением файла
|
||||
<filename>TMPPLIST</filename>.</para>
|
||||
<para>Эта подстановка будет сделана между выполнением целей
|
||||
<buildtarget>pre-install</buildtarget> и
|
||||
<buildtarget>do-install</buildtarget>, посредством чтения файла
|
||||
<filename>PLIST</filename> и записью в файл
|
||||
<filename>TMPPLIST</filename> (по умолчанию это файл
|
||||
<filename>WRKDIR/.PLIST.mktmp</filename>). Так что если ваш
|
||||
порт строит <filename>PLIST</filename> на лету, делайте это во
|
||||
время или до выполнения цели
|
||||
<buildtarget>pre-install</buildtarget>. Кроме того, если
|
||||
вашему порту требуется отредактировать получающийся файл,
|
||||
делайте это в цели <buildtarget>post-install</buildtarget>
|
||||
изменением файла <filename>TMPPLIST</filename>.</para>
|
||||
|
||||
<para>Другой способ изменения списка сборки порта основан на
|
||||
определении значений переменных <varname>PLIST_FILES</varname>,
|
||||
<varname>PLIST_DIRS</varname> и <varname>PLIST_DIRSTRY</varname>.
|
||||
Каждое из них рассматривается как перечень путей для записи в
|
||||
<filename>TMPPLIST</filename> содержимого
|
||||
<filename>PLIST</filename>. Имена, перечисленные
|
||||
в <varname>PLIST_FILES</varname>, <varname>PLIST_DIRS</varname>
|
||||
и <varname>PLIST_DIRSTRY</varname> подвергаются подстановке
|
||||
<literal>%%VAR%%</literal>, как описано
|
||||
выше. За исключением этого, имена из <varname>PLIST_FILES</varname>
|
||||
будут появляться в окончательном варианте перечня сборки без
|
||||
изменений, тогда как <literal>@dirrm</literal> и
|
||||
<literal>@dirrmtry</literal> будут соответственно предшествовать
|
||||
именам из <varname>PLIST_DIRS</varname> и
|
||||
<varname>PLIST_DIRSTRY</varname>. Для того чтобы изменения
|
||||
вступили в силу, <varname>PLIST_FILES</varname>,
|
||||
<varname>PLIST_DIRS</varname> и <varname>PLIST_DIRSTRY</varname>
|
||||
должны задаваться до того, как будет
|
||||
записываться <filename>TMPPLIST</filename>, то
|
||||
есть в цели <buildtarget>pre-install</buildtarget> или ещё
|
||||
раньше.</para>
|
||||
</sect1>
|
||||
<para>Другой способ изменения списка сборки порта основан на
|
||||
определении значений переменных <varname>PLIST_FILES</varname>,
|
||||
<varname>PLIST_DIRS</varname> и
|
||||
<varname>PLIST_DIRSTRY</varname>. Каждое из них
|
||||
рассматривается как перечень путей для записи в
|
||||
<filename>TMPPLIST</filename> содержимого
|
||||
<filename>PLIST</filename>. Имена, перечисленные в
|
||||
<varname>PLIST_FILES</varname>, <varname>PLIST_DIRS</varname> и
|
||||
<varname>PLIST_DIRSTRY</varname> подвергаются подстановке
|
||||
<literal>%%VAR%%</literal>, как описано выше. За исключением
|
||||
этого, имена из <varname>PLIST_FILES</varname> будут появляться
|
||||
в окончательном варианте перечня сборки без изменений, тогда
|
||||
как <literal>@dirrm</literal> и <literal>@dirrmtry</literal>
|
||||
будут соответственно предшествовать именам из
|
||||
<varname>PLIST_DIRS</varname> и
|
||||
<varname>PLIST_DIRSTRY</varname>. Для того чтобы изменения
|
||||
вступили в силу, <varname>PLIST_FILES</varname>,
|
||||
<varname>PLIST_DIRS</varname> и
|
||||
<varname>PLIST_DIRSTRY</varname> должны задаваться до того, как
|
||||
будет записываться <filename>TMPPLIST</filename>, то есть в
|
||||
цели <buildtarget>pre-install</buildtarget> или ещё
|
||||
раньше.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="plist-cleaning">
|
||||
<title>Пустые каталоги</title>
|
||||
<sect1 xml:id="plist-cleaning">
|
||||
<title>Пустые каталоги</title>
|
||||
|
||||
<sect2 xml:id="plist-dir-cleaning">
|
||||
<title>Очистка пустых каталогов</title>
|
||||
<sect2 xml:id="plist-dir-cleaning">
|
||||
<title>Очистка пустых каталогов</title>
|
||||
|
||||
<para>Заставьте ваш порты удалять пустые каталоги при удалении. Обычно это
|
||||
достигается добавлением строк <literal>@dirrm</literal> для всех
|
||||
каталогов, которые создаются этим портом. Вам нужно удалить
|
||||
подкаталоги до того, как вы сможете удалить родительские
|
||||
каталоги.</para>
|
||||
<para>Заставьте ваш порты удалять пустые каталоги при удалении.
|
||||
Обычно это достигается добавлением строк
|
||||
<literal>@dirrm</literal> для всех каталогов, которые
|
||||
создаются этим портом. Вам нужно удалить подкаталоги до
|
||||
того, как вы сможете удалить родительские каталоги.</para>
|
||||
|
||||
<programlisting>
|
||||
:
|
||||
<programlisting> :
|
||||
lib/X11/oneko/pixmaps/cat.xpm
|
||||
lib/X11/oneko/sounds/cat.au
|
||||
:
|
||||
@dirrm lib/X11/oneko/pixmaps
|
||||
@dirrm lib/X11/oneko/sounds
|
||||
@dirrm lib/X11/oneko
|
||||
</programlisting>
|
||||
@dirrm lib/X11/oneko</programlisting>
|
||||
|
||||
<para>Однако, иногда <literal>@dirrm</literal> будет выдавать ошибки,
|
||||
потому что другие порты используют тот же самый подкаталог. Вы
|
||||
можете использовать <literal>@dirrmtry</literal> для удаления
|
||||
только пустых каталогов без выдачи предупреждений.</para>
|
||||
<para>Однако, иногда <literal>@dirrm</literal> будет выдавать
|
||||
ошибки, потому что другие порты используют тот же самый
|
||||
подкаталог. Вы можете использовать
|
||||
<literal>@dirrmtry</literal> для удаления только пустых
|
||||
каталогов без выдачи предупреждений.</para>
|
||||
|
||||
<programlisting>@dirrmtry share/doc/gimp</programlisting>
|
||||
|
||||
<para>Эта команда не выведет никаких сообщений об ошибках и не вызовет
|
||||
аварийного завершения работы <command>pkg delete</command>
|
||||
(см. &man.pkg-delete.8;), даже если
|
||||
каталог <filename>${PREFIX}/share/doc/gimp</filename>
|
||||
<para>Эта команда не выведет никаких сообщений об ошибках и не
|
||||
вызовет аварийного завершения работы
|
||||
<command>pkg delete</command> (см. &man.pkg-delete.8;), даже
|
||||
если каталог <filename>${PREFIX}/share/doc/gimp</filename>
|
||||
ÎÅ ÐÕÓÔ ÉÚ-ÚÁ ÔÏÇÏ, ÞÔÏ ÄÒÕÇÉÅ ÐÏÒÔÙ ÕÓÔÁÎÏ×ÉÌÉ ÓÀÄÁ ËÁËÉÅ-ÔÏ
|
||||
ÆÁÊÌÙ.</para>
|
||||
</sect2>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="plist-dir-empty">
|
||||
<title>Создание пустых каталогов</title>
|
||||
<sect2 xml:id="plist-dir-empty">
|
||||
<title>Создание пустых каталогов</title>
|
||||
|
||||
<para>Пустым каталогам, создаваемым во время установки порта, нужно
|
||||
особое внимание. Они не будут созданы при установке пакета, потому
|
||||
что пакеты содержат только файлы, а <command>pkg add</command>
|
||||
и <command>pkg install</command> создают для них
|
||||
каталоги по мере надобности. Чтобы убедиться, что пустой каталог
|
||||
создается при установке пакета, добавьте эту строку в
|
||||
<filename>pkg-plist</filename> перед соответствующей строкой
|
||||
<literal>@dirrm</literal>:</para>
|
||||
<para>Пустым каталогам, создаваемым во время установки порта,
|
||||
нужно особое внимание. Они не будут созданы при установке
|
||||
пакета, потому что пакеты содержат только файлы, а
|
||||
<command>pkg add</command> и <command>pkg install</command>
|
||||
создают для них каталоги по мере надобности. Чтобы
|
||||
убедиться, что пустой каталог создается при установке пакета,
|
||||
добавьте эту строку в <filename>pkg-plist</filename> перед
|
||||
соответствующей строкой <literal>@dirrm</literal>:</para>
|
||||
|
||||
<programlisting>@exec mkdir -p %D/share/foo/templates</programlisting>
|
||||
</sect2>
|
||||
<programlisting>@exec mkdir -p %D/share/foo/templates</programlisting>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
</sect1>
|
||||
<sect1 xml:id="plist-config">
|
||||
<title>Конфигурационные файлы</title>
|
||||
|
||||
<sect1 xml:id="plist-config">
|
||||
<title>Конфигурационные файлы</title>
|
||||
<para>Если ваш порт устанавливает конфигурационные файлы в
|
||||
каталог <filename>PREFIX/etc</filename> (или куда-то еще),
|
||||
<emphasis>не</emphasis> делайте их простого перечисления в
|
||||
файле <filename>pkg-plist</filename>. Это приведёт к тому, что
|
||||
по команде <command>pkg delete</command> или при новой
|
||||
установке файлы, тщательно отредактированные и настроенные
|
||||
пользователем, будут уничтожены.</para>
|
||||
|
||||
<para>Если ваш порт устанавливает конфигурационные файлы в каталог
|
||||
<filename>PREFIX/etc</filename> (или куда-то еще),
|
||||
<emphasis>не</emphasis> делайте их простого перечисления в файле
|
||||
<filename>pkg-plist</filename>. Это приведёт к тому, что по команде
|
||||
<command>pkg delete</command> или при новой установке файлы,
|
||||
тщательно отредактированные и настроенные пользователем, будут
|
||||
уничтожены.</para>
|
||||
<para>Вместо этого установите файл(ы) с примерами с расширением
|
||||
<filename>filename.sample</filename>. Затем скопируйте файл с
|
||||
примером на место настоящего файла конфигурации, если таковой
|
||||
ещё не существует. При деинсталляции удаляйте файл
|
||||
конфигурации только в том случае, если он идентичен файлу с
|
||||
расширением <filename>.sample</filename>. Вам нужно управлять
|
||||
этим в <filename>Makefile</filename> и в
|
||||
<filename>pkg-plist</filename> (для установки из
|
||||
пакета).</para>
|
||||
|
||||
<para>Вместо этого установите файл(ы) с примерами с расширением
|
||||
<filename>filename.sample</filename>.
|
||||
Затем скопируйте файл с примером на место настоящего файла
|
||||
конфигурации, если таковой ещё не существует. При деинсталляции
|
||||
удаляйте файл конфигурации только в том случае, если он идентичен
|
||||
файлу с расширением <filename>.sample</filename>. Вам
|
||||
нужно управлять этим в <filename>Makefile</filename> и в
|
||||
<filename>pkg-plist</filename> (для установки из пакета).</para>
|
||||
<para>Пример части <filename>Makefile</filename>:</para>
|
||||
|
||||
<para>Пример части <filename>Makefile</filename>:</para>
|
||||
|
||||
<programlisting>post-install:
|
||||
<programlisting>post-install:
|
||||
@if [ ! -f ${PREFIX}/etc/orbit.conf ]; then \
|
||||
${CP} -p ${PREFIX}/etc/orbit.conf.sample ${STAGEDIR}${PREFIX}/etc/orbit.conf ; \
|
||||
fi</programlisting>
|
||||
|
||||
<para>Добавьте по три строки в <filename>pkg-plist</filename> для
|
||||
каждого конфигурационного файла, как показано ниже:</para>
|
||||
<para>Добавьте по три строки в <filename>pkg-plist</filename> для
|
||||
каждого конфигурационного файла, как показано ниже:</para>
|
||||
|
||||
<programlisting>@unexec if cmp -s %D/etc/orbit.conf.sample %D/etc/orbit.conf; then rm -f %D/etc/orbit.conf; fi
|
||||
<programlisting>@unexec if cmp -s %D/etc/orbit.conf.sample %D/etc/orbit.conf; then rm -f %D/etc/orbit.conf; fi
|
||||
etc/orbit.conf.sample
|
||||
@exec if [ ! -f %D/etc/orbit.conf ] ; then cp -p %D/%F %B/orbit.conf; fi</programlisting>
|
||||
|
||||
<para>Данные строки являются упорядоченными. На этапе удаления
|
||||
файл с примером сравнивается с рабочим конфигурационным файлом.
|
||||
Полное совпадение означает отсутствие каких-либо изменений в
|
||||
рабочем файле со стороны пользователя, и следовательно этот файл
|
||||
может быть безопасно удалён. Так как файл с примером всё ещё
|
||||
должен существовать для сравнения, строка <literal>@unexec</literal>
|
||||
следует перед именем файла с примером конфигурации. На этапе
|
||||
установки, если рабочий файл конфигурации отсутствует, он
|
||||
копируется из файла с примером. Файл с примером обязательно
|
||||
должен быть установлен до операции копирования, поэтому строка
|
||||
<literal>@exec</literal> следует после имени файла с примером
|
||||
конфигурации.</para>
|
||||
<para>Данные строки являются упорядоченными. На этапе удаления
|
||||
файл с примером сравнивается с рабочим конфигурационным файлом.
|
||||
Полное совпадение означает отсутствие каких-либо изменений в
|
||||
рабочем файле со стороны пользователя, и следовательно этот
|
||||
файл может быть безопасно удалён. Так как файл с примером всё
|
||||
ещё должен существовать для сравнения, строка
|
||||
<literal>@unexec</literal> следует перед именем файла с
|
||||
примером конфигурации. На этапе установки, если рабочий файл
|
||||
конфигурации отсутствует, он копируется из файла с примером.
|
||||
Файл с примером обязательно должен быть установлен до операции
|
||||
копирования, поэтому строка <literal>@exec</literal> следует
|
||||
после имени файла с примером конфигурации.</para>
|
||||
|
||||
<para>Для получения дополнительного отладочного вывода на экран
|
||||
можно временно удалить параметр <literal>-s</literal> из команды
|
||||
&man.cmp.1;.</para>
|
||||
<para>Для получения дополнительного отладочного вывода на экран
|
||||
можно временно удалить параметр <literal>-s</literal> из
|
||||
команды &man.cmp.1;.</para>
|
||||
|
||||
<para>Для получения дополнительной инфорации по использованию
|
||||
<literal>%D</literal> и прочих маркеров подстановки обратитесь
|
||||
к странице Справочника &man.pkg-create.8;.</para>
|
||||
<para>Для получения дополнительной инфорации по использованию
|
||||
<literal>%D</literal> и прочих маркеров подстановки обратитесь
|
||||
к странице Справочника &man.pkg-create.8;.</para>
|
||||
|
||||
<para>Если существует действительно стоящая причина не устанавливать
|
||||
рабочий файл конфигурации по умолчанию, уберите строку
|
||||
<literal>@exec</literal> из <filename>pkg-plist</filename> и
|
||||
добавьте <link linkend="porting-message">сообщение</link>,
|
||||
указывающее на то, что пользователь обязан скопировать и
|
||||
отредактировать этот файл перед тем, как программное обеспечение
|
||||
начнёт работать.</para>
|
||||
</sect1>
|
||||
<para>Если существует действительно стоящая причина не
|
||||
устанавливать рабочий файл конфигурации по умолчанию, уберите
|
||||
строку <literal>@exec</literal> из
|
||||
<filename>pkg-plist</filename> и добавьте <link
|
||||
linkend="porting-message">сообщение</link>, указывающее на
|
||||
то, что пользователь обязан скопировать и отредактировать этот
|
||||
файл перед тем, как программное обеспечение начнёт
|
||||
работать.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="plist-dynamic">
|
||||
<title>Динамический или статический список упаковки</title>
|
||||
<sect1 xml:id="plist-dynamic">
|
||||
<title>Динамический или статический список упаковки</title>
|
||||
|
||||
<para><emphasis>Статический список упаковки</emphasis> — это список
|
||||
упаковки, который доступен в Коллекции Портов или как файл
|
||||
<filename>pkg-plist</filename> (с подстановкой переменных или без
|
||||
неё), или как встроенный в <filename>Makefile</filename> посредством
|
||||
<varname>PLIST_FILES</varname>, <varname>PLIST_DIRS</varname>
|
||||
и <varname>PLIST_DIRSTRY</varname>.
|
||||
Даже если содержимое является автоматически порождаемым при помощи
|
||||
инструмента или в результате выполнения цели в Makefile
|
||||
<emphasis>до</emphasis> включения в Коллекцию Портов коммиттером,
|
||||
то список всё ещё будет считаться статическим, поскольку его
|
||||
можно узнать без необходимости скачивания или компиляции
|
||||
дистрибутива.</para>
|
||||
<para><emphasis>Статический список упаковки</emphasis> —
|
||||
это список упаковки, который доступен в Коллекции Портов или
|
||||
как файл <filename>pkg-plist</filename> (с подстановкой
|
||||
переменных или без неё), или как встроенный в
|
||||
<filename>Makefile</filename> посредством
|
||||
<varname>PLIST_FILES</varname>, <varname>PLIST_DIRS</varname> и
|
||||
<varname>PLIST_DIRSTRY</varname>. Даже если содержимое
|
||||
является автоматически порождаемым при помощи инструмента или в
|
||||
результате выполнения цели в Makefile <emphasis>до</emphasis>
|
||||
включения в Коллекцию Портов коммиттером, то список всё ещё
|
||||
будет считаться статическим, поскольку его можно узнать без
|
||||
необходимости скачивания или компиляции дистрибутива.</para>
|
||||
|
||||
<para><emphasis>Динамический список упаковки</emphasis> это список
|
||||
упаковки, который получается во время компиляции порта и строится
|
||||
на основе устанавливаемых файлов и каталогов. Узнать такой список
|
||||
невозможно до того, как исходный код портируемого приложения
|
||||
будет скачен и скомпилирован, или после запуска
|
||||
<literal>make clean</literal>.</para>
|
||||
<para><emphasis>Динамический список упаковки</emphasis> это
|
||||
список упаковки, который получается во время компиляции порта и
|
||||
строится на основе устанавливаемых файлов и каталогов. Узнать
|
||||
такой список невозможно до того, как исходный код портируемого
|
||||
приложения будет скачен и скомпилирован, или после запуска
|
||||
<literal>make clean</literal>.</para>
|
||||
|
||||
<para>Хотя использование динамических список упаковки не запрещено,
|
||||
сопровождающие должны использовать статические списки упаковки
|
||||
везде, где это возможно, поскольку это позволяет пользователям
|
||||
выполнять &man.grep.1; по доступным портам для обнаружения, например,
|
||||
который порт устанавливает определенный файл. Динамические списки
|
||||
должны быть использованы в основном для сложных портов, для которых
|
||||
изменения в списке упаковки кардинальным образом основаны на
|
||||
необязательных возможностях порта (и, таким образом, делая
|
||||
сопровождение статических списков упаковки невозможным), или портов,
|
||||
которые изменяют список упаковки на основе версии используемого
|
||||
им программного обеспечения (например, порты, которые порождают
|
||||
документы при помощи <application>Javadoc</application>).</para>
|
||||
</sect1>
|
||||
<para>Хотя использование динамических список упаковки не
|
||||
запрещено, сопровождающие должны использовать статические
|
||||
списки упаковки везде, где это возможно, поскольку это
|
||||
позволяет пользователям выполнять &man.grep.1; по доступным
|
||||
портам для обнаружения, например, который порт устанавливает
|
||||
определенный файл. Динамические списки должны быть
|
||||
использованы в основном для сложных портов, для которых
|
||||
изменения в списке упаковки кардинальным образом основаны на
|
||||
необязательных возможностях порта (и, таким образом, делая
|
||||
сопровождение статических списков упаковки невозможным), или
|
||||
портов, которые изменяют список упаковки на основе версии
|
||||
используемого им программного обеспечения (например, порты,
|
||||
которые порождают документы при помощи
|
||||
<application>Javadoc</application>).</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="plist-autoplist">
|
||||
<title>á×ÔÏÍÁÔÉÞÅÓËÏÅ ÓÏÚÄÁÎÉÅ ÓÐÉÓËÁ ÕÐÁËÏ×ËÉ</title>
|
||||
|
||||
<para>ðÅÒ×ÙÍ ÄÅÌÏÍ ÕÂÅÄÉÔÅÓØ, ÞÔÏ ×ÁÛ ÐÏÒÔ ÐÒÁËÔÉÞÅÓËÉ ÐÏÌÎÏÓÔØÀ
|
||||
завершён и осталось создать только <filename>pkg-plist</filename>.
|
||||
После этого вы можете запустить <command>make makeplist</command>
|
||||
для автоматического создания <filename>pkg-plist</filename>.
|
||||
Содержимое этого файла должно быть дважды перепроверено.</para>
|
||||
завершён и осталось создать только
|
||||
<filename>pkg-plist</filename>. После этого вы можете
|
||||
запустить <command>make makeplist</command> для автоматического
|
||||
создания <filename>pkg-plist</filename>. Содержимое этого
|
||||
файла должно быть дважды перепроверено.</para>
|
||||
|
||||
<para>ðÏÌØÚÏ×ÁÔÅÌØÓËÉÅ ËÏÎÆÉÇÕÒÁÃÉÏÎÎÙÅ ÆÁÊÌÙ ÄÏÌÖÎÙ ÂÙÔØ ÕÄÁÌÅÎÙ
|
||||
или быть установлены как
|
||||
<filename>filename.sample</filename>.
|
||||
Файл <filename>info/dir</filename> включать в список не нужно, но
|
||||
должны быть добавлены соответствующие строчки
|
||||
<filename>install-info</filename>, так, как это описано в разделе о <link linkend="makefile-info">файлах в формате info</link>. Все
|
||||
библиотеки, устанавливаемые портом, должны быть перечислены так, как
|
||||
это описано в разделе о <link linkend="porting-shlibs">динамических библиотеках</link>.</para>
|
||||
или быть установлены как <filename>filename.sample</filename>.
|
||||
Файл <filename>info/dir</filename> включать в список не нужно,
|
||||
но должны быть добавлены соответствующие строчки
|
||||
<filename>install-info</filename>, так, как это описано в
|
||||
разделе о <link
|
||||
linkend="makefile-info">файлах в формате info</link>. Все
|
||||
библиотеки, устанавливаемые портом, должны быть перечислены
|
||||
так, как это описано в разделе о <link
|
||||
linkend="porting-shlibs">динамических
|
||||
библиотеках</link>.</para>
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
||||
</chapter>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -7,21 +7,24 @@
|
|||
Original revision: r43840
|
||||
-->
|
||||
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="porting-samplem">
|
||||
<chapter xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
|
||||
xml:id="porting-samplem">
|
||||
|
||||
<title>Примерный <filename>Makefile</filename></title>
|
||||
<title>Примерный <filename>Makefile</filename></title>
|
||||
|
||||
<para>Вот примерный <filename>Makefile</filename>, который можно
|
||||
использовать при создании нового порта. Обязательно удалите все
|
||||
дополнительные комментарии (те, которые в скобках)!</para>
|
||||
<para>Вот примерный <filename>Makefile</filename>, который можно
|
||||
использовать при создании нового порта. Обязательно удалите все
|
||||
дополнительные комментарии (те, которые в скобках)!</para>
|
||||
|
||||
<para>Вам рекомендуется следовать этому формату (соблюдая порядок
|
||||
следования переменных, пустые строки между разделами, и так далее).
|
||||
Этот формат разработан для того, чтобы важная информация была легко
|
||||
найдена. Мы рекомендуем вам воспользоваться утилитой <link linkend="porting-portlint">portlint</link> для проверки файла
|
||||
<filename>Makefile</filename>.</para>
|
||||
<para>Вам рекомендуется следовать этому формату (соблюдая порядок
|
||||
следования переменных, пустые строки между разделами, и так
|
||||
далее). Этот формат разработан для того, чтобы важная информация
|
||||
была легко найдена. Мы рекомендуем вам воспользоваться утилитой
|
||||
<link linkend="porting-portlint">portlint</link> для проверки
|
||||
файла <filename>Makefile</filename>.</para>
|
||||
|
||||
<programlisting>[заголовок...просто чтобы нам было легче идентифицировать порт.]
|
||||
<programlisting>[заголовок...просто чтобы нам было легче идентифицировать порт.]
|
||||
# Created by: Satoshi Asami <asami@FreeBSD.org>
|
||||
[Необязательная строка <emphasis>Created by:</emphasis> содержит имя
|
||||
человека, создавшего первоначальную версию порта. Следует отметить,
|
||||
|
@ -41,56 +44,56 @@
|
|||
PKGNAMEPREFIX и PKGNAMESUFFIX, если они нужны, следуют за ними.
|
||||
Затем следует DISTNAME, EXTRACT_SUFX и/или DISTFILES, а потом, если это нужно,
|
||||
EXTRACT_ONLY.]
|
||||
PORTNAME= xdvi
|
||||
PORTVERSION= 18.2
|
||||
CATEGORIES= print
|
||||
PORTNAME= xdvi
|
||||
PORTVERSION= 18.2
|
||||
CATEGORIES= print
|
||||
[не забывайте про завершающую косую черту ("/")!
|
||||
если вы не используете макросы MASTER_SITE_*]
|
||||
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
|
||||
MASTER_SITES= ${MASTER_SITE_XCONTRIB}
|
||||
MASTER_SITE_SUBDIR= applications
|
||||
PKGNAMEPREFIX= ja-
|
||||
DISTNAME= xdvi-pl18
|
||||
PKGNAMEPREFIX= ja-
|
||||
DISTNAME= xdvi-pl18
|
||||
[задайте это, если исходный код поставляется не в виде
|
||||
стандартного файла ".tar.gz"]
|
||||
EXTRACT_SUFX= .tar.Z
|
||||
EXTRACT_SUFX= .tar.Z
|
||||
|
||||
[секция патчей -- может быть пустой]
|
||||
PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
|
||||
PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
|
||||
PATCH_SITES= ftp://ftp.sra.co.jp/pub/X11/japanese/
|
||||
PATCHFILES= xdvi-18.patch1.gz xdvi-18.patch2.gz
|
||||
|
||||
[сопровождающий; *обязательное поле*! Это человек, который добровольно
|
||||
занимается обновлениями порта и неисправностями при построении, и которому
|
||||
пользователь может направлять вопросы и сообщения об ошибках. Для
|
||||
сохранения как можно более высокого качества Коллекции Портов мы больше
|
||||
не принимаем новые порты, назначенные на "ports@FreeBSD.org".]
|
||||
MAINTAINER= asami@FreeBSD.org
|
||||
COMMENT= DVI Previewer for the X Window System
|
||||
MAINTAINER= asami@FreeBSD.org
|
||||
COMMENT= DVI Previewer for the X Window System
|
||||
|
||||
[зависимости -- могут быть пустыми]
|
||||
RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
|
||||
RUN_DEPENDS= gs:${PORTSDIR}/print/ghostscript
|
||||
|
||||
[этот раздел для остальных стандартных переменных из bsd.port.mk, кроме
|
||||
тех, что перечислены выше]
|
||||
[Если порт задает вопросы во время этапов настройки, построения,
|
||||
установки...]
|
||||
IS_INTERACTIVE= yes
|
||||
IS_INTERACTIVE= yes
|
||||
[Если распаковка происходит в каталог, отличных от ${DISTNAME}...]
|
||||
WRKSRC= ${WRKDIR}/xdvi-new
|
||||
WRKSRC= ${WRKDIR}/xdvi-new
|
||||
[Если патчи делались не относительно ${WRKSRC}, вам, может быть, не
|
||||
придется изменять эту переменную]
|
||||
PATCH_DIST_STRIP= -p1
|
||||
PATCH_DIST_STRIP= -p1
|
||||
[Если порт требует скрипта "configure", генерируемого GNU-версией программы
|
||||
autoconf]
|
||||
GNU_CONFIGURE= yes
|
||||
GNU_CONFIGURE= yes
|
||||
[Если для построения порту требуется GNU-версия утилиты make, а не
|
||||
/usr/bin/make...]
|
||||
USES= gmake
|
||||
USES= gmake
|
||||
[Если это приложение X и требует запуска "xmkmf -a"...]
|
||||
USES= imake
|
||||
USES= imake
|
||||
[и так далее]
|
||||
|
||||
[В правилах ниже используются нестандартные переменные]
|
||||
MY_FAVORITE_RESPONSE= "yeah, right"
|
||||
MY_FAVORITE_RESPONSE= "yeah, right"
|
||||
|
||||
[теперь специальные правила, в порядке их вызова]
|
||||
pre-fetch:
|
||||
|
@ -104,7 +107,5 @@ pre-install:
|
|||
|
||||
[и, наконец, эпилог]
|
||||
|
||||
.include <bsd.port.mk>
|
||||
</programlisting>
|
||||
</chapter>
|
||||
|
||||
.include <bsd.port.mk></programlisting>
|
||||
</chapter>
|
||||
|
|
|
@ -7,19 +7,20 @@
|
|||
Original revision: r43840
|
||||
-->
|
||||
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="why-port">
|
||||
<chapter xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
|
||||
xml:id="why-port">
|
||||
|
||||
<title>Введение</title>
|
||||
<title>Введение</title>
|
||||
|
||||
<para>Коллекция портов &os; является способом, используемым
|
||||
практически каждым для установки приложений ("портов") на &os;.
|
||||
Как и почти всё остальное во &os;, эта система в основном является
|
||||
добровольно поддерживаемым начинанием. Важно иметь это в виду при
|
||||
чтении данного документа.</para>
|
||||
|
||||
<para>Во &os; каждый может прислать новый порт либо изъявить желание
|
||||
поддерживать существующий порт, если его никто ещё никто не
|
||||
поддерживает—вам не нужно иметь никаких особых привилегий на
|
||||
внесение изменений, чтобы это делать.</para>
|
||||
</chapter>
|
||||
<para>Коллекция портов &os; является способом, используемым
|
||||
практически каждым для установки приложений ("портов") на &os;.
|
||||
Как и почти всё остальное во &os;, эта система в основном
|
||||
является добровольно поддерживаемым начинанием. Важно иметь это
|
||||
в виду при чтении данного документа.</para>
|
||||
|
||||
<para>Во &os; каждый может прислать новый порт либо изъявить
|
||||
желание поддерживать существующий порт, если его никто ещё никто
|
||||
не поддерживает—вам не нужно иметь никаких особых
|
||||
привилегий на внесение изменений, чтобы это делать.</para>
|
||||
</chapter>
|
||||
|
|
|
@ -7,150 +7,155 @@
|
|||
Original revision: r43840
|
||||
-->
|
||||
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="quick-porting">
|
||||
<chapter xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
|
||||
xml:id="quick-porting">
|
||||
|
||||
<title>Быстрое портирование</title>
|
||||
<title>Быстрое портирование</title>
|
||||
|
||||
<para>В этом разделе описано, как создать новый порт на скорую руку.
|
||||
Во многих случаях этого бывает не достаточно, так что вам нужно будет
|
||||
прочитать документ дальше.</para>
|
||||
<para>В этом разделе описано, как создать новый порт на скорую
|
||||
руку. Во многих случаях этого бывает не достаточно, так что вам
|
||||
нужно будет прочитать документ дальше.</para>
|
||||
|
||||
<para>Во-первых, скачайте оригинальный tar-файл и поместите его в каталог
|
||||
<varname>DISTDIR</varname>, который по умолчанию есть не что иное, как
|
||||
<filename>/usr/ports/distfiles</filename>.</para>
|
||||
<para>Во-первых, скачайте оригинальный tar-файл и поместите его в
|
||||
каталог <varname>DISTDIR</varname>, который по умолчанию есть не
|
||||
что иное, как <filename>/usr/ports/distfiles</filename>.</para>
|
||||
|
||||
<note>
|
||||
<para>Здесь предполагается, что программное обеспечение компилируется
|
||||
без проблем как есть, то есть для работы приложения на вашей системе
|
||||
&os; не потребовалось абсолютно никаких изменений. Если
|
||||
требовалось что-то изменить, то вам придется обратиться также и к
|
||||
следующему разделу.</para>
|
||||
</note>
|
||||
<note>
|
||||
<para>Здесь предполагается, что программное обеспечение
|
||||
компилируется без проблем как есть, то есть для работы
|
||||
приложения на вашей системе &os; не потребовалось абсолютно
|
||||
никаких изменений. Если требовалось что-то изменить, то вам
|
||||
придется обратиться также и к следующему разделу.</para>
|
||||
</note>
|
||||
|
||||
<note>
|
||||
<para>Перед началом портирования рекомендуется установить
|
||||
переменную &man.make.1; <varname>DEVELOPER</varname> в
|
||||
<filename>/etc/make.conf</filename>.</para>
|
||||
<note>
|
||||
<para>Перед началом портирования рекомендуется установить
|
||||
переменную &man.make.1; <varname>DEVELOPER</varname> в
|
||||
<filename>/etc/make.conf</filename>.</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>echo DEVELOPER=yes >> /etc/make.conf</userinput></screen>
|
||||
<screen>&prompt.root; <userinput>echo DEVELOPER=yes >> /etc/make.conf</userinput></screen>
|
||||
|
||||
<para>Эта настройка включает <quote>режим разработчика</quote>,
|
||||
в котором отображаются предупреждения при использовании
|
||||
устаревших конструкций и задействуются некоторые дополнительные
|
||||
проверки при вызове команды <command>make</command>.</para>
|
||||
</note>
|
||||
<para>Эта настройка включает <quote>режим разработчика</quote>, в
|
||||
котором отображаются предупреждения при использовании
|
||||
устаревших конструкций и задействуются некоторые дополнительные
|
||||
проверки при вызове команды <command>make</command>.</para>
|
||||
</note>
|
||||
|
||||
<sect1 xml:id="porting-makefile">
|
||||
<title>Создание файла <filename>Makefile</filename></title>
|
||||
<sect1 xml:id="porting-makefile">
|
||||
<title>Создание файла <filename>Makefile</filename></title>
|
||||
|
||||
<para>Минимальный <filename>Makefile</filename> будет выглядеть
|
||||
примерно так:</para>
|
||||
<para>Минимальный <filename>Makefile</filename> будет выглядеть
|
||||
примерно так:</para>
|
||||
|
||||
<programlisting># $FreeBSD$
|
||||
<programlisting># $FreeBSD$
|
||||
|
||||
PORTNAME= oneko
|
||||
PORTVERSION= 1.1b
|
||||
CATEGORIES= games
|
||||
MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
|
||||
PORTNAME= oneko
|
||||
PORTVERSION= 1.1b
|
||||
CATEGORIES= games
|
||||
MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
|
||||
|
||||
MAINTAINER= youremail@example.com
|
||||
COMMENT= Cat chasing a mouse all over the screen
|
||||
MAINTAINER= youremail@example.com
|
||||
COMMENT= Cat chasing a mouse all over the screen
|
||||
|
||||
.include <bsd.port.mk></programlisting>
|
||||
|
||||
<note>
|
||||
<para>В некоторых случаях в заголовке
|
||||
<filename>Makefile</filename> существующего порта могут
|
||||
содержаться дополнительные строки, такие как название порта и
|
||||
дата его создания. Эта дополнительная информация была
|
||||
объявлена устаревшей и находится в процессе удаления.</para>
|
||||
</note>
|
||||
|
||||
<para>Посмотрим, сможете ли вы его понять. Не обращайте внимание
|
||||
на содержимое строчки
|
||||
<literal>$FreeBSD$</literal>, она будет заполнена
|
||||
автоматически системой <application>Subversion</application>,
|
||||
когда порт будет импортирован в наше дерево портов. Вы можете
|
||||
найти более подробный пример в разделе <link
|
||||
linkend="porting-samplem">пример Makefile</link>.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="porting-desc">
|
||||
<title>Создание информационных файлов</title>
|
||||
|
||||
<para>Имеется два информационных файла, которые требуются для
|
||||
любого порта, вне зависимости от того, является ли он пакетом
|
||||
или нет. Это <filename>pkg-descr</filename> и
|
||||
<filename>pkg-plist</filename>. Префикс
|
||||
<filename>pkg-</filename> отличает их от других файлов.</para>
|
||||
|
||||
<sect2>
|
||||
<title><filename>pkg-descr</filename></title>
|
||||
|
||||
<para>Это более подробное краткое описание порта. От одного до
|
||||
нескольких абзацев, кратко описывающих, что представляет
|
||||
собой порт, будет достаточно.</para>
|
||||
|
||||
<note>
|
||||
<para>В некоторых случаях в заголовке <filename>Makefile</filename>
|
||||
существующего порта могут содержаться дополнительные строки,
|
||||
такие как название порта и дата его создания.
|
||||
Эта дополнительная информация была объявлена устаревшей
|
||||
и находится в процессе удаления.</para>
|
||||
<para>Это <emphasis>не</emphasis> руководство и не
|
||||
подробнейшее описание того, как использовать или
|
||||
компилировать порт! <emphasis>Пожалуйста, будьте
|
||||
внимательны при копировании текста из
|
||||
<filename>README</filename> или страниц справочника
|
||||
</emphasis>; слишком часто они не являются кратким
|
||||
описанием порта или имеют неудобный формат (например,
|
||||
страницы справочника выровнены пробелами, что особенно
|
||||
плохо смотрится с моноширинными шрифтами).</para>
|
||||
</note>
|
||||
|
||||
<para>Посмотрим, сможете ли вы его понять. Не обращайте внимание на
|
||||
содержимое строчки <literal>$FreeBSD$</literal>, она
|
||||
будет заполнена автоматически системой
|
||||
<application>Subversion</application>, когда порт будет
|
||||
импортирован в наше дерево портов. Вы можете найти более подробный
|
||||
пример в разделе <link linkend="porting-samplem">пример
|
||||
Makefile</link>.</para>
|
||||
</sect1>
|
||||
<para>Хорошо составленный <filename>pkg-descr</filename>
|
||||
описывает порт достаточно полно, чтобы пользователю не
|
||||
приходилось сверяться с документацией или посещать вебсайт
|
||||
для понимания того, что делает данное программное
|
||||
обеспечение, чем оно может быть полезно или какие хорошие
|
||||
функции у него имеются. Упоминание про определённые
|
||||
требования, такие как используемый графический
|
||||
инструментарий, тяжёлые зависимости, окружение для запуска
|
||||
или используемый язык программирования помогут пользователям
|
||||
определиться, будет ли этот порт для них работать.</para>
|
||||
|
||||
<sect1 xml:id="porting-desc">
|
||||
<title>Создание информационных файлов</title>
|
||||
<para>Включите сюда URL официальной домашней страницы Интернет.
|
||||
Перед <emphasis>одним</emphasis> из сайтов (выберите
|
||||
основной) добавьте <literal>WWW:</literal> (с последующим
|
||||
единичным пробелом) для того, чтобы вспомогательные утилиты
|
||||
работали правильно. Если URI является корнем сайта или
|
||||
каталогом, то значение должно быть дополнено косой
|
||||
чертой.</para>
|
||||
|
||||
<para>Имеется два информационных файла, которые требуются для любого
|
||||
порта, вне зависимости от того, является ли он пакетом или нет. Это
|
||||
<filename>pkg-descr</filename> и <filename>pkg-plist</filename>.
|
||||
Префикс <filename>pkg-</filename> отличает их от других файлов.</para>
|
||||
<note>
|
||||
<para>Если указанная для порта веб-страница не доступна,
|
||||
попытайтесь сперва поискать, был ли официальный сайт
|
||||
перемещён, переименован или размещён в другом месте.</para>
|
||||
</note>
|
||||
|
||||
<sect2>
|
||||
<title><filename>pkg-descr</filename></title>
|
||||
<para>Следующий пример показывает, как должен выглядеть ваш
|
||||
<filename>pkg-descr</filename>:</para>
|
||||
|
||||
<para>Это более подробное краткое описание порта. От одного до
|
||||
нескольких абзацев, кратко описывающих, что представляет собой
|
||||
порт, будет достаточно.</para>
|
||||
|
||||
<note>
|
||||
<para>Это <emphasis>не</emphasis> руководство и не подробнейшее
|
||||
описание того, как использовать или компилировать порт!
|
||||
<emphasis>Пожалуйста, будьте внимательны при копировании текста
|
||||
из <filename>README</filename> или страниц
|
||||
справочника</emphasis>; слишком часто они не являются кратким
|
||||
описанием порта или имеют неудобный формат (например, страницы
|
||||
справочника выровнены пробелами, что особенно плохо
|
||||
смотрится с моноширинными шрифтами).</para>
|
||||
</note>
|
||||
|
||||
<para>Хорошо составленный <filename>pkg-descr</filename>
|
||||
описывает порт достаточно полно, чтобы пользователю не
|
||||
приходилось сверяться с документацией или посещать вебсайт
|
||||
для понимания того, что делает данное программное обеспечение,
|
||||
чем оно может быть полезно или какие хорошие функции у него
|
||||
имеются. Упоминание про определённые требования, такие как
|
||||
используемый графический инструментарий, тяжёлые зависимости,
|
||||
окружение для запуска или используемый язык программирования
|
||||
помогут пользователям определиться, будет ли этот порт для
|
||||
них работать.</para>
|
||||
|
||||
<para>Включите сюда URL официальной домашней страницы Интернет.
|
||||
Перед <emphasis>одним</emphasis> из сайтов (выберите основной)
|
||||
добавьте <literal>WWW:</literal> (с последующим единичным
|
||||
пробелом) для того, чтобы вспомогательные утилиты работали
|
||||
правильно. Если URI является корнем сайта или каталогом,
|
||||
то значение должно быть дополнено косой чертой.</para>
|
||||
|
||||
<note>
|
||||
<para>Если указанная для порта веб-страница не доступна,
|
||||
попытайтесь сперва поискать, был ли официальный сайт
|
||||
перемещён, переименован или размещён в другом месте.</para>
|
||||
</note>
|
||||
|
||||
<para>Следующий пример показывает, как должен выглядеть ваш
|
||||
<filename>pkg-descr</filename>:</para>
|
||||
|
||||
<programlisting>This is a port of oneko, in which a cat chases a poor mouse all over
|
||||
<programlisting>This is a port of oneko, in which a cat chases a poor mouse all over
|
||||
the screen.
|
||||
:
|
||||
(etc.)
|
||||
|
||||
WWW: http://www.oneko.org/</programlisting>
|
||||
</sect2>
|
||||
</sect2>
|
||||
|
||||
<sect2>
|
||||
<title><filename>pkg-plist</filename></title>
|
||||
<sect2>
|
||||
<title><filename>pkg-plist</filename></title>
|
||||
|
||||
<para>Здесь перечисляются все файлы, устанавливаемые портом. Его
|
||||
также называют <quote>списком для упаковки</quote>, потому что
|
||||
пакет генерируется упаковкой файлов, которые здесь указаны.
|
||||
Имена путей указываются относительно установочного префикса
|
||||
(обычно <filename>/usr/local</filename>).
|
||||
Если порт во время установки создает каталоги, убедитесь,
|
||||
что добавлены строки <literal>@dirrm</literal> для удаления
|
||||
каталогов при удалении пакета.</para>
|
||||
<para>Здесь перечисляются все файлы, устанавливаемые портом.
|
||||
Его также называют <quote>списком для упаковки</quote>,
|
||||
потому что пакет генерируется упаковкой файлов, которые здесь
|
||||
указаны. Имена путей указываются относительно установочного
|
||||
префикса (обычно <filename>/usr/local</filename>). Если порт
|
||||
во время установки создает каталоги, убедитесь, что добавлены
|
||||
строки <literal>@dirrm</literal> для удаления каталогов при
|
||||
удалении пакета.</para>
|
||||
|
||||
<para>Вот маленький пример:</para>
|
||||
<para>Вот маленький пример:</para>
|
||||
|
||||
<programlisting>bin/oneko
|
||||
<programlisting>bin/oneko
|
||||
man/man1/oneko.1.gz
|
||||
lib/X11/app-defaults/Oneko
|
||||
lib/X11/oneko/cat1.xpm
|
||||
|
@ -158,250 +163,258 @@ lib/X11/oneko/cat2.xpm
|
|||
lib/X11/oneko/mouse.xpm
|
||||
@dirrm lib/X11/oneko</programlisting>
|
||||
|
||||
<para>Обратитесь к странице справочной системы по команде
|
||||
&man.pkg-create.8; с подробным описанием формата списка
|
||||
упаковки.</para>
|
||||
|
||||
<note>
|
||||
<para>Рекомендуется, чтобы имена файлов в этом списке были
|
||||
отсортированы в алфавитном порядке. Это позволит значительно
|
||||
облегчить сверку изменений при обновлении порта.</para>
|
||||
</note>
|
||||
|
||||
<note>
|
||||
<para>Создание списка упаковки вручную может оказаться весьма
|
||||
трудоёмкой задачей. Если порт устанавливает большое количество
|
||||
файлов, раздел об <link linkend="plist-autoplist">автоматическом построении списка
|
||||
упаковки</link> может помочь сэкономить время.</para>
|
||||
</note>
|
||||
|
||||
<para>Существует только одно исключение, когда у порта может
|
||||
отсутствовать <filename>pkg-plist</filename>. Если порт
|
||||
устанавливает лишь несколько файлов, а возможно, и каталогов, то
|
||||
они могут быть перечислены в переменных
|
||||
<varname>PLIST_FILES</varname> и <varname>PLIST_DIRS</varname>,
|
||||
соответственно, внутри файла <filename>Makefile</filename> порта.
|
||||
К примеру, мы можем обойтись без файла
|
||||
<filename>pkg-plist</filename> у приведённого выше порта
|
||||
<filename>oneko</filename>, добавив следующие строки в
|
||||
<filename>Makefile</filename>:</para>
|
||||
|
||||
<programlisting>PLIST_FILES= bin/oneko \
|
||||
man/man1/oneko.1.gz \
|
||||
lib/X11/app-defaults/Oneko \
|
||||
lib/X11/oneko/cat1.xpm \
|
||||
lib/X11/oneko/cat2.xpm \
|
||||
lib/X11/oneko/mouse.xpm
|
||||
PLIST_DIRS= lib/X11/oneko</programlisting>
|
||||
|
||||
<para>Конечно, переменная <varname>PLIST_DIRS</varname> не должна
|
||||
задаваться, если порт не устанавливает никаких каталогов.</para>
|
||||
|
||||
<note>
|
||||
<para>Несколько портов могут совместно использовать общий
|
||||
каталог. В этом случае <varname>PLIST_DIRS</varname>
|
||||
следует заменить на <varname>PLIST_DIRSTRY</varname>, так
|
||||
чтобы каталог удалялся только если он пуст, а иначе
|
||||
игнорировался. Использование <varname>PLIST_DIRS</varname>
|
||||
и <varname>PLIST_DIRSTRY</varname> аналогично
|
||||
<literal>@dirrm</literal> и <literal>@dirrmtry</literal>
|
||||
в <filename>pkg-plist</filename>, описание которых
|
||||
входит в <xref linkend="plist-dir-cleaning"/>.</para>
|
||||
</note>
|
||||
|
||||
<para>Обратной стороной такого способа перечисления файлов и
|
||||
каталогов порта является невозможность использования
|
||||
последовательностей команд, описанных в &man.pkg-create.8;.
|
||||
Поэтому он подходит для простых портов, что делает их ещё более
|
||||
простыми. Одновременно с этим положительным моментом является
|
||||
уменьшение количества файлов в коллекции портов. Пожалуйста,
|
||||
подумайте над использованием этой техники, прежде чем создавать
|
||||
<filename>pkg-plist</filename>.</para>
|
||||
|
||||
<para>Далее мы увидим, как можно использовать файлы
|
||||
<filename>pkg-plist</filename> и <varname>PLIST_FILES</varname>
|
||||
выполнения <link linkend="plist">более сложных
|
||||
задач</link>.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="porting-checksum">
|
||||
<title>Создание файла с контрольной суммой</title>
|
||||
|
||||
<para>Просто введите команду <command>make makesum</command>.
|
||||
Правила утилиты make автоматически сгенерируют файл
|
||||
<filename>distinfo</filename>.</para>
|
||||
|
||||
<para>Если у извлекаемого файла регулярно меняется контрольная
|
||||
сумма и вы не сомневаетесь в надежности источника (т.е. он получен
|
||||
из CD производителя, либо ежедневно обновляется документация), то вы
|
||||
должны указать эти файлы в переменной <varname>IGNOREFILES</varname>.
|
||||
Тогда контрольная сумма при выполнении <command>make makesum</command>
|
||||
для этого файла создаваться не будет, а вместо этого для него будет
|
||||
установлено значение <literal>IGNORE</literal>.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="porting-testing">
|
||||
<title>Тестирование порта</title>
|
||||
|
||||
<para>Вы должны удостовериться, что правила построения порта выполняют
|
||||
именно то, что вы хотите, включая создание пакета для порта. Вот
|
||||
те важные вещи, которые вы должны проверить.</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><filename>pkg-plist</filename> не содержит ничего сверх того,
|
||||
что устанавливается портом</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><filename>pkg-plist</filename> содержит абсолютно все, что
|
||||
устанавливается портом</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Порт может быть установлен с помощью
|
||||
указания цели <buildtarget>install</buildtarget>. Это
|
||||
позволяет убедиться в правильной работе сценария
|
||||
установки.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Порт может быть правильным образом удалён с помощью
|
||||
указания цели <buildtarget>deinstall</buildtarget>. Это
|
||||
позволяет убедиться в правильной работе сценария
|
||||
удаления.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Следует убедиться, что <command>make package</command>
|
||||
можно запустить из-под обычного пользователя (то есть,
|
||||
не из-под <systemitem class="username">root</systemitem>).
|
||||
Если это не так, в <filename>Makefile</filename> порта
|
||||
должно быть добавлено <literal>NEED_ROOT=yes</literal>.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<procedure>
|
||||
<title>Рекомендуемый порядок проверки</title>
|
||||
|
||||
<step>
|
||||
<para><command>make stage</command></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><command>make check-orphans</command></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><command>make package</command></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><command>make install</command></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><command>make deinstall</command></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><command>pkg add package-filename</command></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><command>make package</command> (из-под
|
||||
пользователя)</para>
|
||||
</step>
|
||||
</procedure>
|
||||
|
||||
<para>Убедитесь, что на любом из этапов не выдается никаких
|
||||
предупреждений.</para>
|
||||
|
||||
<para>Основательное автоматизированное тестирование может быть
|
||||
выполнено при помощи
|
||||
<package role="port">ports-mgmt/tinderbox</package> или
|
||||
<package role="port">ports-mgmt/poudriere</package> из Коллекции
|
||||
Портов. Эти приложения используют <literal>jails</literal>,
|
||||
в которых проверяются все перечисленные выше этапы без
|
||||
изменения состояния основной системы.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="porting-portlint">
|
||||
<title>Проверка вашего порта утилитой
|
||||
<command>portlint</command></title>
|
||||
|
||||
<para>Будьте добры, пользуйтесь утилитой <command>portlint</command>
|
||||
для проверки того, что ваш порт соответствует нашим рекомендациям.
|
||||
Программа <package role="port">ports-mgmt/portlint</package>
|
||||
является частью Коллекции
|
||||
Портов. В частности, вы можете захотеть проверить, правильно ли
|
||||
сформирован файл <link linkend="porting-samplem">Makefile</link> и
|
||||
соответствующим ли образом именован <link linkend="porting-pkgname">пакет</link>.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="porting-submitting">
|
||||
<title>Посылка нового порта</title>
|
||||
|
||||
<para>Перед посылкой нового порта прочитайте раздел о том, что
|
||||
<link linkend="porting-dads">можно и нельзя</link> делать.</para>
|
||||
|
||||
<para>Когда вы наконец довольны своим первым портом, единственное,
|
||||
что осталось сделать, это включить его в основное дерево портов
|
||||
&os; и осчастливить этим всех остальных. Нам не нужен ни
|
||||
каталог <filename>work</filename>, ни пакет
|
||||
<filename>pkgname.tgz</filename>, так что удалите их прямо
|
||||
сейчас.</para>
|
||||
|
||||
<para>Затем получите файл &man.shar.1;. Предполагая, что порт
|
||||
называется oneko, перейдите в каталог выше, где находится
|
||||
каталог <literal>oneko</literal>, и наберите:
|
||||
<command>shar `find oneko` > oneko.shar</command></para>
|
||||
|
||||
<para>Включите <filename>oneko.shar</filename> в сообщение об
|
||||
ошибке и пошлите его с помощью &man.send-pr.1;. Обратитесь к
|
||||
разделу <link
|
||||
xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">
|
||||
Сообщения об ошибках и общие замечания</link> для получения
|
||||
подробной информации о &man.send-pr.1;).</para>
|
||||
|
||||
<para>Укажите в сообщении категорию <literal>ports</literal> и
|
||||
класс <literal>change-request</literal>.
|
||||
<emphasis>Не</emphasis> указывайте, что сообщение имеет статус
|
||||
<literal>confidential</literal>! Добавьте краткое описание
|
||||
программы в поле <quote>Description</quote> отправляемого PR
|
||||
(например, содержимое <varname>COMMENT</varname> в сокращённом
|
||||
варианте) и сам файл в виде архива <filename>.shar</filename>
|
||||
в поле <quote>Fix</quote>.</para>
|
||||
<para>Обратитесь к странице справочной системы по команде
|
||||
&man.pkg-create.8; с подробным описанием формата списка
|
||||
упаковки.</para>
|
||||
|
||||
<note>
|
||||
<para>Хорошее описание в заголовке сообщения о проблеме
|
||||
значительно облегчает работу коммиттеров портов. Для новых
|
||||
портов мы предпочитаем нечто вроде <quote>New port:
|
||||
<категория>/<название порта> <краткое
|
||||
описание порта></quote>. Следование этой схеме
|
||||
упрощает и ускоряет начало работы по добавлению нового
|
||||
<para>Рекомендуется, чтобы имена файлов в этом списке были
|
||||
отсортированы в алфавитном порядке. Это позволит
|
||||
значительно облегчить сверку изменений при обновлении
|
||||
ÐÏÒÔÁ.</para>
|
||||
</note>
|
||||
|
||||
<para>Повторим ещё раз, что <emphasis>не нужно включать ни оригинальный
|
||||
файл с дистрибутивом, ни каталог <filename>work</filename>,
|
||||
ни пакет, построенный вами командой
|
||||
<command>make package</command></emphasis>; для новых портов
|
||||
используйте &man.shar.1;, но не &man.diff.1;.</para>
|
||||
<note>
|
||||
<para>Создание списка упаковки вручную может оказаться весьма
|
||||
трудоёмкой задачей. Если порт устанавливает большое
|
||||
количество файлов, раздел об <link
|
||||
linkend="plist-autoplist">автоматическом построении
|
||||
списка упаковки</link> может помочь сэкономить
|
||||
время.</para>
|
||||
</note>
|
||||
|
||||
<para>После отправки порта, пожалуйста, потерпите. Время,
|
||||
необходимое для включения нового порта во &os;, может занимать
|
||||
от нескольких дней до нескольких месяцев. <link
|
||||
xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports">
|
||||
Здесь</link> можно увидеть список ожидающих PR для портов.</para>
|
||||
<para>Существует только одно исключение, когда у порта может
|
||||
отсутствовать <filename>pkg-plist</filename>. Если порт
|
||||
устанавливает лишь несколько файлов, а возможно, и каталогов,
|
||||
то они могут быть перечислены в переменных
|
||||
<varname>PLIST_FILES</varname> и
|
||||
<varname>PLIST_DIRS</varname>, соответственно, внутри файла
|
||||
<filename>Makefile</filename> порта. К примеру, мы можем
|
||||
обойтись без файла <filename>pkg-plist</filename> у
|
||||
приведённого выше порта <filename>oneko</filename>, добавив
|
||||
следующие строки в <filename>Makefile</filename>:</para>
|
||||
|
||||
<para>После рассмотрения нового порта мы при необходимости вам
|
||||
ответим, а затем включим порт в наше дерево. Ваше имя также
|
||||
будет добавлено в список <link
|
||||
xlink:href="&url.articles.contributors;/contrib-additional.html">
|
||||
Дополнительных контрибуторов проекта &os;</link> и другие
|
||||
файлы.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<programlisting>PLIST_FILES= bin/oneko \
|
||||
man/man1/oneko.1.gz \
|
||||
lib/X11/app-defaults/Oneko \
|
||||
lib/X11/oneko/cat1.xpm \
|
||||
lib/X11/oneko/cat2.xpm \
|
||||
lib/X11/oneko/mouse.xpm
|
||||
PLIST_DIRS= lib/X11/oneko</programlisting>
|
||||
|
||||
<para>Конечно, переменная <varname>PLIST_DIRS</varname> не
|
||||
должна задаваться, если порт не устанавливает никаких
|
||||
каталогов.</para>
|
||||
|
||||
<note>
|
||||
<para>Несколько портов могут совместно использовать общий
|
||||
каталог. В этом случае <varname>PLIST_DIRS</varname>
|
||||
следует заменить на <varname>PLIST_DIRSTRY</varname>, так
|
||||
чтобы каталог удалялся только если он пуст, а иначе
|
||||
игнорировался. Использование <varname>PLIST_DIRS</varname>
|
||||
и <varname>PLIST_DIRSTRY</varname> аналогично
|
||||
<literal>@dirrm</literal> и <literal>@dirrmtry</literal> в
|
||||
<filename>pkg-plist</filename>, описание которых входит в
|
||||
<xref linkend="plist-dir-cleaning"/>.</para>
|
||||
</note>
|
||||
|
||||
<para>Обратной стороной такого способа перечисления файлов и
|
||||
каталогов порта является невозможность использования
|
||||
последовательностей команд, описанных в &man.pkg-create.8;.
|
||||
Поэтому он подходит для простых портов, что делает их ещё
|
||||
более простыми. Одновременно с этим положительным моментом
|
||||
является уменьшение количества файлов в коллекции портов.
|
||||
Пожалуйста, подумайте над использованием этой техники, прежде
|
||||
чем создавать <filename>pkg-plist</filename>.</para>
|
||||
|
||||
<para>Далее мы увидим, как можно использовать файлы
|
||||
<filename>pkg-plist</filename> и
|
||||
<varname>PLIST_FILES</varname> выполнения <link
|
||||
linkend="plist">более сложных задач</link>.</para>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="porting-checksum">
|
||||
<title>Создание файла с контрольной суммой</title>
|
||||
|
||||
<para>Просто введите команду <command>make makesum</command>.
|
||||
Правила утилиты make автоматически сгенерируют файл
|
||||
<filename>distinfo</filename>.</para>
|
||||
|
||||
<para>Если у извлекаемого файла регулярно меняется контрольная
|
||||
сумма и вы не сомневаетесь в надежности источника (т.е. он
|
||||
получен из CD производителя, либо ежедневно обновляется
|
||||
документация), то вы должны указать эти файлы в переменной
|
||||
<varname>IGNOREFILES</varname>. Тогда контрольная сумма при
|
||||
выполнении <command>make makesum</command> для этого файла
|
||||
создаваться не будет, а вместо этого для него будет установлено
|
||||
значение <literal>IGNORE</literal>.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="porting-testing">
|
||||
<title>Тестирование порта</title>
|
||||
|
||||
<para>Вы должны удостовериться, что правила построения порта
|
||||
выполняют именно то, что вы хотите, включая создание пакета для
|
||||
порта. Вот те важные вещи, которые вы должны проверить.</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><filename>pkg-plist</filename> не содержит ничего сверх
|
||||
того, что устанавливается портом</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><filename>pkg-plist</filename> содержит абсолютно все,
|
||||
что устанавливается портом</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Порт может быть установлен с помощью указания цели
|
||||
<buildtarget>install</buildtarget>. Это позволяет
|
||||
убедиться в правильной работе сценария установки.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Порт может быть правильным образом удалён с помощью
|
||||
указания цели <buildtarget>deinstall</buildtarget>. Это
|
||||
позволяет убедиться в правильной работе сценария
|
||||
удаления.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Следует убедиться, что <command>make package</command>
|
||||
можно запустить из-под обычного пользователя (то есть, не
|
||||
из-под <systemitem class="username">root</systemitem>).
|
||||
Если это не так, в <filename>Makefile</filename> порта
|
||||
должно быть добавлено
|
||||
<literal>NEED_ROOT=yes</literal>.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
<procedure>
|
||||
<title>Рекомендуемый порядок проверки</title>
|
||||
|
||||
<step>
|
||||
<para><command>make stage</command></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><command>make check-orphans</command></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><command>make package</command></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><command>make install</command></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><command>make deinstall</command></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><command>pkg add package-filename</command></para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para><command>make package</command> (из-под
|
||||
пользователя)</para>
|
||||
</step>
|
||||
</procedure>
|
||||
|
||||
<para>Убедитесь, что на любом из этапов не выдается никаких
|
||||
предупреждений.</para>
|
||||
|
||||
<para>Основательное автоматизированное тестирование может быть
|
||||
выполнено при помощи <package
|
||||
role="port">ports-mgmt/tinderbox</package> или <package
|
||||
role="port">ports-mgmt/poudriere</package> из Коллекции
|
||||
Портов. Эти приложения используют <literal>jails</literal>,
|
||||
в которых проверяются все перечисленные выше этапы без
|
||||
изменения состояния основной системы.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="porting-portlint">
|
||||
<title>Проверка вашего порта утилитой
|
||||
<command>portlint</command></title>
|
||||
|
||||
<para>Будьте добры, пользуйтесь утилитой
|
||||
<command>portlint</command> для проверки того, что ваш порт
|
||||
соответствует нашим рекомендациям. Программа <package
|
||||
role="port">ports-mgmt/portlint</package> является частью
|
||||
Коллекции Портов. В частности, вы можете захотеть проверить,
|
||||
правильно ли сформирован файл <link
|
||||
linkend="porting-samplem">Makefile</link> и соответствующим
|
||||
ли образом именован <link
|
||||
linkend="porting-pkgname">пакет</link>.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="porting-submitting">
|
||||
<title>Посылка нового порта</title>
|
||||
|
||||
<para>Перед посылкой нового порта прочитайте раздел о том, что
|
||||
<link linkend="porting-dads">можно и нельзя</link>
|
||||
делать.</para>
|
||||
|
||||
<para>Когда вы наконец довольны своим первым портом,
|
||||
единственное, что осталось сделать, это включить его в основное
|
||||
дерево портов &os; и осчастливить этим всех остальных. Нам не
|
||||
нужен ни каталог <filename>work</filename>, ни пакет
|
||||
<filename>pkgname.tgz</filename>, так что удалите их прямо
|
||||
сейчас.</para>
|
||||
|
||||
<para>Затем получите файл &man.shar.1;. Предполагая, что порт
|
||||
называется oneko, перейдите в каталог выше, где находится
|
||||
каталог <literal>oneko</literal>, и наберите:
|
||||
<command>shar `find oneko` > oneko.shar</command></para>
|
||||
|
||||
<para>Включите <filename>oneko.shar</filename> в сообщение об
|
||||
ошибке и пошлите его с помощью &man.send-pr.1;. Обратитесь к
|
||||
разделу <link
|
||||
xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">Сообщения
|
||||
об ошибках и общие замечания</link> для получения подробной
|
||||
информации о &man.send-pr.1;).</para>
|
||||
|
||||
<para>Укажите в сообщении категорию <literal>ports</literal> и
|
||||
класс <literal>change-request</literal>.
|
||||
<emphasis>Не</emphasis> указывайте, что сообщение имеет статус
|
||||
<literal>confidential</literal>! Добавьте краткое описание
|
||||
программы в поле <quote>Description</quote> отправляемого PR
|
||||
(например, содержимое <varname>COMMENT</varname> в сокращённом
|
||||
варианте) и сам файл в виде архива <filename>.shar</filename> в
|
||||
поле <quote>Fix</quote>.</para>
|
||||
|
||||
<note>
|
||||
<para>Хорошее описание в заголовке сообщения о проблеме
|
||||
значительно облегчает работу коммиттеров портов. Для новых
|
||||
портов мы предпочитаем нечто вроде <quote>New port:
|
||||
<категория>/<название порта> <краткое
|
||||
описание порта></quote>. Следование этой схеме упрощает
|
||||
и ускоряет начало работы по добавлению нового порта.</para>
|
||||
</note>
|
||||
|
||||
<para>Повторим ещё раз, что <emphasis>не нужно включать ни
|
||||
оригинальный файл с дистрибутивом, ни каталог
|
||||
<filename>work</filename>, ни пакет, построенный вами
|
||||
командой <command>make package</command></emphasis>; для
|
||||
новых портов используйте &man.shar.1;, но не
|
||||
&man.diff.1;.</para>
|
||||
|
||||
<para>После отправки порта, пожалуйста, потерпите. Время,
|
||||
необходимое для включения нового порта во &os;, может занимать
|
||||
от нескольких дней до нескольких месяцев. <link
|
||||
xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports">
|
||||
Здесь</link> можно увидеть список ожидающих PR для
|
||||
портов.</para>
|
||||
|
||||
<para>После рассмотрения нового порта мы при необходимости вам
|
||||
ответим, а затем включим порт в наше дерево. Ваше имя также
|
||||
будет добавлено в список <link
|
||||
xlink:href="&url.articles.contributors;/contrib-additional.html">
|
||||
Дополнительных контрибуторов проекта &os;</link> и другие
|
||||
файлы.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
|
@ -7,157 +7,165 @@
|
|||
Original revision: r43840
|
||||
-->
|
||||
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="security">
|
||||
<chapter xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
|
||||
xml:id="security">
|
||||
|
||||
<title>Безопасность портов</title>
|
||||
<title>Безопасность портов</title>
|
||||
|
||||
<sect1 xml:id="security-intro">
|
||||
<title>Почему безопасность так важна</title>
|
||||
<sect1 xml:id="security-intro">
|
||||
<title>Почему безопасность так важна</title>
|
||||
|
||||
<para>Ошибки в программном обеспечении появляются случайно. Возможно,
|
||||
самые опасные из них те, что создают уязвимости безопасности. С
|
||||
технической точки зрения подобные уязвимости должны быть закрыты
|
||||
путем исправления вызывающих их ошибок. Тем не менее, политики
|
||||
обработки несущественных ошибок и уязвимостей очень различаются.
|
||||
</para>
|
||||
<para>Ошибки в программном обеспечении появляются случайно.
|
||||
Возможно, самые опасные из них те, что создают уязвимости
|
||||
безопасности. С технической точки зрения подобные уязвимости
|
||||
должны быть закрыты путем исправления вызывающих их ошибок.
|
||||
Тем не менее, политики обработки несущественных ошибок и
|
||||
уязвимостей очень различаются.</para>
|
||||
|
||||
<para>Обычная небольшая ошибка затрагивает только тех пользователей,
|
||||
которые задействуют некоторые комбинации настроек, активирующие эту
|
||||
ошибку. Разработчик в конечном счете выпустит патч, а зачтем новую
|
||||
версию программного обеспечения, свободного от ошибки, но большинство
|
||||
пользователей не посчитают нужным сразу же произвести обновление,
|
||||
поскольку эта ошибка никогда у них не проявлялась. Критическая
|
||||
ошибка, которая может приводить к потере данных, представляет
|
||||
серьезную проблему. Тем не менее, предусмотрительные пользователи
|
||||
знают, что большинство возможных происшествий, и среди них программные
|
||||
ошибки, скорее всего приводят к потере данных, поэтому они выполняют
|
||||
резервное копирование важных данных; дополнительно, критическая
|
||||
ошибка будет обнаружена очень скоро.</para>
|
||||
<para>Обычная небольшая ошибка затрагивает только тех
|
||||
пользователей, которые задействуют некоторые комбинации
|
||||
настроек, активирующие эту ошибку. Разработчик в конечном
|
||||
счете выпустит патч, а зачтем новую версию программного
|
||||
обеспечения, свободного от ошибки, но большинство пользователей
|
||||
не посчитают нужным сразу же произвести обновление, поскольку
|
||||
эта ошибка никогда у них не проявлялась. Критическая ошибка,
|
||||
которая может приводить к потере данных, представляет серьезную
|
||||
проблему. Тем не менее, предусмотрительные пользователи знают,
|
||||
что большинство возможных происшествий, и среди них программные
|
||||
ошибки, скорее всего приводят к потере данных, поэтому они
|
||||
выполняют резервное копирование важных данных; дополнительно,
|
||||
критическая ошибка будет обнаружена очень скоро.</para>
|
||||
|
||||
<para>С уязвимостью безопасности всё иначе. Во-первых, она может
|
||||
сохраняться необнаруженной целые годы, потому что чаще всего не
|
||||
вызывает ошибок в работе. Во-вторых, компания злоумышленников
|
||||
может использовать ее для получения неавторизованного доступа к
|
||||
уязвимой системе, уничтожить или подменить важные данные; в худшем
|
||||
случае пользователь даже не заметит нанесенный урон. В-третьих,
|
||||
взлом уязвимой системы часто упрощает задачу проникновения атакующих
|
||||
в другие системы, которые не могут быть скомпрометированы иначе.
|
||||
Таким образом, устранение уязвимости как таковой недостаточно:
|
||||
следует разослать всем заинтересованным уведомления в наиболее
|
||||
понятной и исчерпывающей форме, что позволит оценить риск и
|
||||
предпринять подходящие меры.</para>
|
||||
</sect1>
|
||||
<para>С уязвимостью безопасности всё иначе. Во-первых, она может
|
||||
сохраняться необнаруженной целые годы, потому что чаще всего не
|
||||
вызывает ошибок в работе. Во-вторых, компания злоумышленников
|
||||
может использовать ее для получения неавторизованного доступа к
|
||||
уязвимой системе, уничтожить или подменить важные данные; в
|
||||
худшем случае пользователь даже не заметит нанесенный урон.
|
||||
В-третьих, взлом уязвимой системы часто упрощает задачу
|
||||
проникновения атакующих в другие системы, которые не могут быть
|
||||
скомпрометированы иначе. Таким образом, устранение уязвимости
|
||||
как таковой недостаточно: следует разослать всем
|
||||
заинтересованным уведомления в наиболее понятной и
|
||||
исчерпывающей форме, что позволит оценить риск и предпринять
|
||||
подходящие меры.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="security-fix">
|
||||
<title>Исправление уязвимостей безопасности</title>
|
||||
<sect1 xml:id="security-fix">
|
||||
<title>Исправление уязвимостей безопасности</title>
|
||||
|
||||
<para>Что касается портов и пакетов, уязвимость безопасности
|
||||
изначально может появиться в исходном дистрибутиве или файлах
|
||||
порта. В первом случае, разработчик исходного программного
|
||||
обеспечения скорее всего сразу же выпустит патч или новую версию,
|
||||
и вам лишь понадобится сразу обновить порт в соответствии с
|
||||
исправлением автора. Если исправление по какой-то причине
|
||||
задерживается, вам следует либо <link linkend="dads-noinstall">пометить
|
||||
порт как <varname>FORBIDDEN</varname></link>, либо добавить в порт
|
||||
ваш собственный патч. В случае уязвимости порта просто исправьте
|
||||
этот порт как можно скорее. В любом случае нужно следовать
|
||||
<link linkend="port-upgrading">стандартной процедуре отправки вашего
|
||||
изменения</link>, если вы не обладаете правами на коммит изменения
|
||||
непосредственно в дерево портов.</para>
|
||||
<para>Что касается портов и пакетов, уязвимость безопасности
|
||||
изначально может появиться в исходном дистрибутиве или файлах
|
||||
порта. В первом случае, разработчик исходного программного
|
||||
обеспечения скорее всего сразу же выпустит патч или новую
|
||||
версию, и вам лишь понадобится сразу обновить порт в
|
||||
соответствии с исправлением автора. Если исправление по
|
||||
какой-то причине задерживается, вам следует либо <link
|
||||
linkend="dads-noinstall">пометить порт как
|
||||
<varname>FORBIDDEN</varname></link>, либо добавить в порт ваш
|
||||
собственный патч. В случае уязвимости порта просто исправьте
|
||||
этот порт как можно скорее. В любом случае нужно следовать
|
||||
<link linkend="port-upgrading">стандартной процедуре отправки
|
||||
вашего изменения</link>, если вы не обладаете правами на
|
||||
коммит изменения непосредственно в дерево портов.</para>
|
||||
|
||||
<important>
|
||||
<para>Быть коммиттером портов недостаточно для коммита произвольного
|
||||
порта. Помните, что обычно у портов есть сопровождающие, мнение
|
||||
которых вы должны учитывать.</para>
|
||||
</important>
|
||||
<important>
|
||||
<para>Быть коммиттером портов недостаточно для коммита
|
||||
произвольного порта. Помните, что обычно у портов есть
|
||||
сопровождающие, мнение которых вы должны учитывать.</para>
|
||||
</important>
|
||||
|
||||
<para>Пожалуйста, убедитесь, что ревизия порта после закрытия
|
||||
уязвимости увеличена. Вот как пользователи, обновляющие
|
||||
установленные пакеты на постоянной основе, увидят, что им нужно
|
||||
запустить обновление. Кроме того, новый пакет будет собран и
|
||||
распространен через FTP и WWW зеркала, замещая уязвимый.
|
||||
Если в процессе исправления уязвимости не было изменено значение
|
||||
<varname>PORTVERSION</varname>, то должно быть увеличено значение
|
||||
<varname>PORTREVISION</varname>. Вам следует увеличить значение
|
||||
<varname>PORTREVISION</varname> после добавления в порт файла с
|
||||
патчем, но не когда вы обновили порт до последней версии
|
||||
программного обеспечения, попутно затронув при этом
|
||||
<varname>PORTVERSION</varname>. За дальнейшей информацией
|
||||
обращайтесь к
|
||||
<link linkend="makefile-naming-revepoch">соответствующему
|
||||
<para>Пожалуйста, убедитесь, что ревизия порта после закрытия
|
||||
уязвимости увеличена. Вот как пользователи, обновляющие
|
||||
установленные пакеты на постоянной основе, увидят, что им нужно
|
||||
запустить обновление. Кроме того, новый пакет будет собран и
|
||||
распространен через FTP и WWW зеркала, замещая уязвимый. Если
|
||||
в процессе исправления уязвимости не было изменено значение
|
||||
<varname>PORTVERSION</varname>, то должно быть увеличено
|
||||
значение <varname>PORTREVISION</varname>. Вам следует
|
||||
увеличить значение <varname>PORTREVISION</varname> после
|
||||
добавления в порт файла с патчем, но не когда вы обновили порт
|
||||
до последней версии программного обеспечения, попутно затронув
|
||||
при этом <varname>PORTVERSION</varname>. За дальнейшей
|
||||
информацией обращайтесь к <link
|
||||
linkend="makefile-naming-revepoch">соответствующему
|
||||
ÒÁÚÄÅÌÕ</link>.</para>
|
||||
</sect1>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="security-notify">
|
||||
<title>Обеспечение сообщества информацией</title>
|
||||
<sect1 xml:id="security-notify">
|
||||
<title>Обеспечение сообщества информацией</title>
|
||||
|
||||
<sect2 xml:id="security-notify-vuxml-db">
|
||||
<title>База данных VuXML</title>
|
||||
<sect2 xml:id="security-notify-vuxml-db">
|
||||
<title>База данных VuXML</title>
|
||||
|
||||
<para>Очень важным и первостепенным шагом при действии как можно
|
||||
раньше после раскрытия уязвимости является уведомление сообщества
|
||||
пользователей порта об опасности. Такие уведомления служат двум
|
||||
целям. Во-первых, в случае действительно серьезной угрозы, будет
|
||||
посоветовано применить мгновенное воздействие. Например, остановить
|
||||
затрагиваемый сетевой сервис или даже удалить порт целиком,
|
||||
пока уязвимость не будет устранена. Во-вторых, масса
|
||||
пользователей имеет тенденцию обновлять установленные пакеты только от
|
||||
случая к случаю. Из уведомления они узнают, что
|
||||
<emphasis>должны</emphasis> обновить пакет без промедления сразу
|
||||
же после появления исправленной версии.</para>
|
||||
<para>Очень важным и первостепенным шагом при действии как
|
||||
можно раньше после раскрытия уязвимости является уведомление
|
||||
сообщества пользователей порта об опасности. Такие
|
||||
уведомления служат двум целям. Во-первых, в случае
|
||||
действительно серьезной угрозы, будет посоветовано применить
|
||||
мгновенное воздействие. Например, остановить затрагиваемый
|
||||
сетевой сервис или даже удалить порт целиком, пока уязвимость
|
||||
не будет устранена. Во-вторых, масса пользователей имеет
|
||||
тенденцию обновлять установленные пакеты только от случая к
|
||||
случаю. Из уведомления они узнают, что
|
||||
<emphasis>должны</emphasis> обновить пакет без промедления
|
||||
сразу же после появления исправленной версии.</para>
|
||||
|
||||
<para>Учитывая огромное число портов в дереве, невозможно по
|
||||
каждому случаю выпускать бюллетень безопасности без создания
|
||||
флуда и потери внимания сообщества к моменту появления
|
||||
действительно серьезных причин. Поэтому уязвимости безопасности,
|
||||
обнаруженные в портах, записываются в
|
||||
<link xlink:href="http://vuxml.freebsd.org/">базу данных
|
||||
&os; VuXML</link>.
|
||||
Члены Команды Офицеров Безопасности также отслеживают её на
|
||||
предмет появления вопросов, требующих их вмешательства.</para>
|
||||
<para>Учитывая огромное число портов в дереве, невозможно по
|
||||
каждому случаю выпускать бюллетень безопасности без создания
|
||||
флуда и потери внимания сообщества к моменту появления
|
||||
действительно серьезных причин. Поэтому уязвимости
|
||||
безопасности, обнаруженные в портах, записываются в <link
|
||||
xlink:href="http://vuxml.freebsd.org/">базу данных &os;
|
||||
VuXML</link>. Члены Команды Офицеров Безопасности также
|
||||
отслеживают её на предмет появления вопросов, требующих их
|
||||
вмешательства.</para>
|
||||
|
||||
<para>Если вы обладаете правами коммиттера, вы можете сам обновить
|
||||
базу данных VuXML. Так вы поможете Команде Офицеров Безопасности
|
||||
и своевременно пошлете ценную информацию сообществу. Тем не
|
||||
менее, если вы не являетесь коммиттером или верите, что нашли
|
||||
исключительно серьезную уязвимость, то не
|
||||
задумываясь свяжитесь с Командой Офицеров Безопасности напрямую
|
||||
как это описано на странице
|
||||
<link xlink:href="http://www.freebsd.org/security/#how">информационной
|
||||
<para>Если вы обладаете правами коммиттера, вы можете сам
|
||||
обновить базу данных VuXML. Так вы поможете Команде Офицеров
|
||||
Безопасности и своевременно пошлете ценную информацию
|
||||
сообществу. Тем не менее, если вы не являетесь коммиттером
|
||||
или верите, что нашли исключительно серьезную уязвимость, то
|
||||
не задумываясь свяжитесь с Командой Офицеров Безопасности
|
||||
напрямую как это описано на странице <link
|
||||
xlink:href="http://www.freebsd.org/security/#how">информационной
|
||||
ÂÅÚÏÐÁÓÎÏÓÔÉ &os;</link>.</para>
|
||||
|
||||
<para>База данных VuXML является документом <acronym>XML</acronym>.
|
||||
Его исходный файл <filename>vuln.xml</filename> содержится
|
||||
прямо внутри порта <package role="port">security/vuxml</package>.
|
||||
Следовательно, полное имя пути к файлу будет
|
||||
<filename>PORTSDIR/security/vuxml/vuln.xml</filename>.
|
||||
Каждый раз, при обнаружении вами в порте уязвимости безопасности
|
||||
добавьте об этом запись в этот файл. Пока вы не знакомы с VuXML,
|
||||
лучшее, что вы можете сделать, это найти существующую запись,
|
||||
подпадающую под ваш случай, затем скопировать ее и использовать
|
||||
в качестве шаблона.</para>
|
||||
</sect2>
|
||||
<para>База данных VuXML является документом
|
||||
<acronym>XML</acronym>. Его исходный файл
|
||||
<filename>vuln.xml</filename> содержится прямо внутри порта
|
||||
<package role="port">security/vuxml</package>.
|
||||
Следовательно, полное имя пути к файлу будет
|
||||
<filename>PORTSDIR/security/vuxml/vuln.xml</filename>.
|
||||
Каждый раз, при обнаружении вами в порте уязвимости
|
||||
безопасности добавьте об этом запись в этот файл. Пока вы не
|
||||
знакомы с VuXML, лучшее, что вы можете сделать, это найти
|
||||
существующую запись, подпадающую под ваш случай, затем
|
||||
скопировать ее и использовать в качестве шаблона.</para>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="security-notify-vuxml-intro">
|
||||
<title>Короткое вступление в VuXML</title>
|
||||
<sect2 xml:id="security-notify-vuxml-intro">
|
||||
<title>Короткое вступление в VuXML</title>
|
||||
|
||||
<para>В совокупности <acronym>XML</acronym> является очень
|
||||
сложным форматом, и его описание выходит далеко за рамки
|
||||
этой книги. Тем не менее, для достижения основного понимания
|
||||
структуры записи VuXML вам понадобится всего лишь понять теги.
|
||||
Имена тегов XML обрамляются в угловые скобки. Каждый открывающий
|
||||
<tag> должен иметь совпадающий закрывающий </tag>.
|
||||
Теги могут быть вложенными. При вложенности внутренние теги
|
||||
должны быть закрыты до закрытия внешних. Существует иерархия
|
||||
тегов, т.е. более сложные правила вкладывания тегов. Это
|
||||
похоже на HTML. Основное отличие в расширяемости XML,
|
||||
т.е. в определении собственных тегов. Из-за своей характерной
|
||||
структуры XML придает форму разрозненным данным. В частности,
|
||||
XML подходит для разметки описаний уязвимостей безопасности.</para>
|
||||
<para>В совокупности <acronym>XML</acronym> является очень
|
||||
сложным форматом, и его описание выходит далеко за рамки этой
|
||||
книги. Тем не менее, для достижения основного понимания
|
||||
структуры записи VuXML вам понадобится всего лишь понять
|
||||
теги. Имена тегов XML обрамляются в угловые скобки. Каждый
|
||||
открывающий <tag> должен иметь совпадающий закрывающий
|
||||
</tag>. Теги могут быть вложенными. При вложенности
|
||||
внутренние теги должны быть закрыты до закрытия внешних.
|
||||
Существует иерархия тегов, т.е. более сложные правила
|
||||
вкладывания тегов. Это похоже на HTML. Основное отличие в
|
||||
расширяемости XML, т.е. в определении собственных тегов.
|
||||
Из-за своей характерной структуры XML придает форму
|
||||
разрозненным данным. В частности, XML подходит для разметки
|
||||
описаний уязвимостей безопасности.</para>
|
||||
|
||||
<para>Теперь рассмотрим настоящую запись VuXML:</para>
|
||||
<para>Теперь рассмотрим настоящую запись VuXML:</para>
|
||||
|
||||
<programlisting><vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"> <co xml:id="co-vx-vid"/>
|
||||
<programlisting><vuln vid="f4bc80f4-da62-11d8-90ea-0004ac98a7b9"> <co xml:id="co-vx-vid"/>
|
||||
<topic>Several vulnerabilities found in Foo</topic> <co xml:id="co-vx-top"/>
|
||||
<affects>
|
||||
<package>
|
||||
|
@ -206,281 +214,296 @@
|
|||
</dates>
|
||||
</vuln></programlisting>
|
||||
|
||||
<para>Имена тегов должны быть самодокументируемыми, чтобы мы
|
||||
сфокусировались только на полях, нужных нам для заполнения:</para>
|
||||
<para>Имена тегов должны быть самодокументируемыми, чтобы мы
|
||||
сфокусировались только на полях, нужных нам для
|
||||
заполнения:</para>
|
||||
|
||||
<calloutlist>
|
||||
<callout arearefs="co-vx-vid">
|
||||
<para>Это тег верхнего уровня записи VuXML. У него есть
|
||||
обязательный атрибут <literal>vid</literal>, указывающий на
|
||||
универсальный уникальный идентификатор (UUID) для этой записи
|
||||
(в кавычках). Вы должны формировать UUID для каждой новой
|
||||
записи VuXML (и не забудьте заменить ее для шаблона UUID,
|
||||
если вы не пишете запись с нуля). Для получения VuXML UUID
|
||||
вы можете использовать &man.uuidgen.1;.</para>
|
||||
</callout>
|
||||
<calloutlist>
|
||||
<callout arearefs="co-vx-vid">
|
||||
<para>Это тег верхнего уровня записи VuXML. У него есть
|
||||
обязательный атрибут <literal>vid</literal>, указывающий
|
||||
на универсальный уникальный идентификатор (UUID) для этой
|
||||
записи (в кавычках). Вы должны формировать UUID для
|
||||
каждой новой записи VuXML (и не забудьте заменить ее для
|
||||
шаблона UUID, если вы не пишете запись с нуля). Для
|
||||
получения VuXML UUID вы можете использовать
|
||||
&man.uuidgen.1;.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-top">
|
||||
<para>Однострочное описание найденной проблемы.</para>
|
||||
</callout>
|
||||
<callout arearefs="co-vx-top">
|
||||
<para>Однострочное описание найденной проблемы.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-nam">
|
||||
<para>Здесь перечислены имена затронутых пакетов.
|
||||
Может быть дано несколько имен, поскольку некоторые пакеты
|
||||
могут быть основаны на одном главном порте или программном
|
||||
продукте. Сюда можно включить стабильную ветвь и ветвь
|
||||
разработки, локализованные версии и подчиненные порты,
|
||||
зависящие от различного выбора важных вариантов конфигурации,
|
||||
указанных на этапе построения.</para>
|
||||
<callout arearefs="co-vx-nam">
|
||||
<para>Здесь перечислены имена затронутых пакетов. Может
|
||||
быть дано несколько имен, поскольку некоторые пакеты
|
||||
могут быть основаны на одном главном порте или
|
||||
программном продукте. Сюда можно включить стабильную
|
||||
ветвь и ветвь разработки, локализованные версии и
|
||||
подчиненные порты, зависящие от различного выбора важных
|
||||
вариантов конфигурации, указанных на этапе
|
||||
построения.</para>
|
||||
|
||||
<important>
|
||||
<para>Поиск всех подобных пакетов при написании записи VuXML
|
||||
входит в зону вашей ответственности. Имейте в виду, что
|
||||
<literal>make search name=foo</literal> это ваш друг.
|
||||
Первичные точки для поиска следующие:</para>
|
||||
<important>
|
||||
<para>Поиск всех подобных пакетов при написании записи
|
||||
VuXML входит в зону вашей ответственности. Имейте в
|
||||
виду, что <literal>make search name=foo</literal> это
|
||||
ваш друг. Первичные точки для поиска следующие:</para>
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>вариант <filename>foo-devel</filename> для порта
|
||||
<filename>foo</filename>;</para>
|
||||
</listitem>
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para>вариант <filename>foo-devel</filename> для
|
||||
порта <filename>foo</filename>;</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>другие варианты с суффиксами вида
|
||||
<literal>-a4</literal> (для пакетов, связанных с печатью),
|
||||
<literal>-without-gui</literal> (для пакетов с
|
||||
отключенной поддержкой X), или подобных;</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>другие варианты с суффиксами вида
|
||||
<literal>-a4</literal> (для пакетов, связанных с
|
||||
печатью), <literal>-without-gui</literal> (для
|
||||
пакетов с отключенной поддержкой X), или
|
||||
подобных;</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>jp-</literal>, <literal>ru-</literal>,
|
||||
<literal>zh-</literal> и другие возможные локализованные
|
||||
варианты в соответствующих национальных категориях
|
||||
коллекции портов.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</important>
|
||||
</callout>
|
||||
<listitem>
|
||||
<para><literal>jp-</literal>, <literal>ru-</literal>,
|
||||
<literal>zh-</literal> и другие возможные
|
||||
локализованные варианты в соответствующих
|
||||
национальных категориях коллекции портов.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
</important>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-rng">
|
||||
<para>Здесь указаны затронутые версии пакета(-ов) как один или
|
||||
более диапазонов с использованием комбинации элементов
|
||||
<literal><lt></literal>, <literal><le></literal>,
|
||||
<literal><eq></literal>, <literal><ge></literal>,
|
||||
и <literal><gt></literal>. Диапазоны внесённых версий
|
||||
не должны пересекаться.</para>
|
||||
<callout arearefs="co-vx-rng">
|
||||
<para>Здесь указаны затронутые версии пакета(-ов) как один
|
||||
или более диапазонов с использованием комбинации
|
||||
элементов <literal><lt></literal>,
|
||||
<literal><le></literal>,
|
||||
<literal><eq></literal>,
|
||||
<literal><ge></literal>, и
|
||||
<literal><gt></literal>. Диапазоны внесённых
|
||||
версий не должны пересекаться.</para>
|
||||
|
||||
<para>В спецификации диапазонов <literal>*</literal> (звёздочка)
|
||||
означает наименьший номер версии. В частности,
|
||||
<literal>2.*</literal> меньше, чем <literal>2.a</literal>.
|
||||
Поэтому звездочка может быть использована в диапазоне для
|
||||
совпадения со всеми возможными <literal>alpha</literal>,
|
||||
<literal>beta</literal> и <literal>RC</literal> версиями.
|
||||
Как вариант,
|
||||
<literal><ge>2.*</ge><lt>3.*</lt></literal>
|
||||
выборочно совпадет с версией <literal>2.x</literal>, а
|
||||
<literal><ge>2.0</ge><lt>3.0</lt></literal>
|
||||
- нет, поскольку последнее не включает
|
||||
<literal>2.r3</literal> и совпадает с <literal>3.b</literal>.
|
||||
</para>
|
||||
<para>В спецификации диапазонов <literal>*</literal>
|
||||
(звёздочка) означает наименьший номер версии. В
|
||||
частности, <literal>2.*</literal> меньше, чем
|
||||
<literal>2.a</literal>. Поэтому звездочка может быть
|
||||
использована в диапазоне для совпадения со всеми
|
||||
возможными <literal>alpha</literal>,
|
||||
<literal>beta</literal> и <literal>RC</literal> версиями.
|
||||
Как вариант,
|
||||
<literal><ge>2.*</ge><lt>3.*</lt></literal>
|
||||
выборочно совпадет с версией <literal>2.x</literal>, а
|
||||
<literal><ge>2.0</ge><lt>3.0</lt></literal>
|
||||
- нет, поскольку последнее не включает
|
||||
<literal>2.r3</literal> и совпадает с
|
||||
<literal>3.b</literal>.</para>
|
||||
|
||||
<para>Пример выше указывает, что к затронутым относятся версии с
|
||||
<literal>1.6</literal> до <literal>1.9</literal> включительно,
|
||||
версии <literal>2.x</literal> до <literal>2.4_1</literal> и
|
||||
версия <literal>3.0b1</literal>.</para>
|
||||
</callout>
|
||||
<para>Пример выше указывает, что к затронутым относятся
|
||||
версии с <literal>1.6</literal> до <literal>1.9</literal>
|
||||
включительно, версии <literal>2.x</literal> до
|
||||
<literal>2.4_1</literal> и версия
|
||||
<literal>3.0b1</literal>.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-nm2">
|
||||
<para>Некоторые связанные группы пакетов (в конечном счете, порты)
|
||||
могут быть указаны в разделе <literal><affected></literal>.
|
||||
Это можно использовать, если некоторые программные продукты
|
||||
(скажем, FooBar, FreeBar and OpenBar) являются производными
|
||||
от общей кодовой базы и всё еще совместно используют её ошибки
|
||||
и уязвимости. Имейте в виду отличие от перечисления
|
||||
множественных имён в одном разделе <package>.</para>
|
||||
</callout>
|
||||
<callout arearefs="co-vx-nm2">
|
||||
<para>Некоторые связанные группы пакетов (в конечном счете,
|
||||
порты) могут быть указаны в разделе
|
||||
<literal><affected></literal>. Это можно
|
||||
использовать, если некоторые программные продукты
|
||||
(скажем, FooBar, FreeBar and OpenBar) являются
|
||||
производными от общей кодовой базы и всё еще совместно
|
||||
используют её ошибки и уязвимости. Имейте в виду отличие
|
||||
от перечисления множественных имён в одном разделе
|
||||
<package>.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-epo">
|
||||
<para>Диапазоны версий должны учитывать
|
||||
<varname>PORTEPOCH</varname> и <varname>PORTREVISION</varname>,
|
||||
если это применимо. Пожалуйста, помните, что в соответствии
|
||||
с правилами сравнения строк версия с ненулевым значением
|
||||
<varname>PORTEPOCH</varname> выше, чем любая версия без
|
||||
<varname>PORTEPOCH</varname>, например, <literal>3.0,1</literal>
|
||||
выше, чем <literal>3.1</literal> или даже <literal>8.9</literal>.
|
||||
</para>
|
||||
</callout>
|
||||
<callout arearefs="co-vx-epo">
|
||||
<para>Диапазоны версий должны учитывать
|
||||
<varname>PORTEPOCH</varname> и
|
||||
<varname>PORTREVISION</varname>, если это применимо.
|
||||
Пожалуйста, помните, что в соответствии с правилами
|
||||
сравнения строк версия с ненулевым значением
|
||||
<varname>PORTEPOCH</varname> выше, чем любая версия без
|
||||
<varname>PORTEPOCH</varname>, например,
|
||||
<literal>3.0,1</literal> выше, чем <literal>3.1</literal>
|
||||
или даже <literal>8.9</literal>.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-bdy">
|
||||
<para>Сводная информация о проблеме. В этом поле
|
||||
используется XHTML. По крайней мере, должны быть обрамляющие
|
||||
<literal><p></literal> и <literal></p></literal>.
|
||||
Может быть использована более сложная разметка, но только в
|
||||
целях аккуратности и ясности: без эстетства, пожалуйста.
|
||||
</para>
|
||||
</callout>
|
||||
<callout arearefs="co-vx-bdy">
|
||||
<para>Сводная информация о проблеме. В этом поле
|
||||
используется XHTML. По крайней мере, должны быть
|
||||
обрамляющие <literal><p></literal> и
|
||||
<literal></p></literal>. Может быть использована
|
||||
более сложная разметка, но только в целях аккуратности и
|
||||
ясности: без эстетства, пожалуйста.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-ref">
|
||||
<para>Этот раздел содержит ссылки на имеющие отношение документы.
|
||||
Приветствуется как можно большее количество ссылок.</para>
|
||||
</callout>
|
||||
<callout arearefs="co-vx-ref">
|
||||
<para>Этот раздел содержит ссылки на имеющие отношение
|
||||
документы. Приветствуется как можно большее количество
|
||||
ссылок.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-fsa">
|
||||
<para>Это
|
||||
<link xlink:href="http://www.freebsd.org/security/#adv">бюллетень
|
||||
<callout arearefs="co-vx-fsa">
|
||||
<para>Это <link
|
||||
xlink:href="http://www.freebsd.org/security/#adv">бюллетень
|
||||
ÂÅÚÏÐÁÓÎÏÓÔÉ &os;</link>.</para>
|
||||
</callout>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-fpr">
|
||||
<para>Это
|
||||
<link xlink:href="http://www.freebsd.org/support.html#gnats">сообщение
|
||||
<callout arearefs="co-vx-fpr">
|
||||
<para>Это <link
|
||||
xlink:href="http://www.freebsd.org/support.html#gnats">сообщение
|
||||
ÏÂ ÏÛÉÂËÅ &os;</link>.</para>
|
||||
</callout>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-cve">
|
||||
<para>Идентификатор
|
||||
<link xlink:href="http://www.cve.mitre.org/">MITRE
|
||||
<callout arearefs="co-vx-cve">
|
||||
<para>Идентификатор <link
|
||||
xlink:href="http://www.cve.mitre.org/">MITRE
|
||||
CVE</link>.</para>
|
||||
</callout>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-bid">
|
||||
<para>Это
|
||||
<link xlink:href="http://www.securityfocus.com/bid">SecurityFocus
|
||||
<callout arearefs="co-vx-bid">
|
||||
<para>Это <link
|
||||
xlink:href="http://www.securityfocus.com/bid">SecurityFocus
|
||||
Bug ID</link>.</para>
|
||||
</callout>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-cts">
|
||||
<para>Бюллетень безопасности
|
||||
<link xlink:href="http://www.cert.org/">US-CERT</link>.</para>
|
||||
</callout>
|
||||
<callout arearefs="co-vx-cts">
|
||||
<para>Бюллетень безопасности <link
|
||||
xlink:href="http://www.cert.org/">US-CERT</link>.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-ctv">
|
||||
<para>Примечание к уязвимости
|
||||
<link xlink:href="http://www.cert.org/">US-CERT</link>.</para>
|
||||
</callout>
|
||||
<callout arearefs="co-vx-ctv">
|
||||
<para>Примечание к уязвимости <link
|
||||
xlink:href="http://www.cert.org/">US-CERT</link>.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-ucs">
|
||||
<para>Уведомление системы Cyber Security Alert
|
||||
<link xlink:href="http://www.cert.org/">US-CERT</link>.</para>
|
||||
</callout>
|
||||
<callout arearefs="co-vx-ucs">
|
||||
<para>Уведомление системы Cyber Security Alert <link
|
||||
xlink:href="http://www.cert.org/">US-CERT</link>.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-uct">
|
||||
<para>Уведомление системы Technical Cyber Security Alert
|
||||
<link xlink:href="http://www.cert.org/">US-CERT</link>.</para>
|
||||
</callout>
|
||||
<callout arearefs="co-vx-uct">
|
||||
<para>Уведомление системы Technical Cyber Security Alert
|
||||
<link
|
||||
xlink:href="http://www.cert.org/">US-CERT</link>.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-mls">
|
||||
<para>URL к архивному сообщению в списке рассылки.
|
||||
Атрибут <literal>msgid</literal> является необязательным
|
||||
и может указывать на message ID сообщения.</para>
|
||||
</callout>
|
||||
<callout arearefs="co-vx-mls">
|
||||
<para>URL к архивному сообщению в списке рассылки. Атрибут
|
||||
<literal>msgid</literal> является необязательным и может
|
||||
указывать на message ID сообщения.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-url">
|
||||
<para>Основной URL. Должен быть использован в случае, если
|
||||
не подходит ни одна из категорий источника.</para>
|
||||
</callout>
|
||||
<callout arearefs="co-vx-url">
|
||||
<para>Основной URL. Должен быть использован в случае, если
|
||||
не подходит ни одна из категорий источника.</para>
|
||||
</callout>
|
||||
|
||||
<callout arearefs="co-vx-dsc">
|
||||
<para>Дата последнего изменения любой информации данной записи
|
||||
(<replaceable>YYYY-MM-DD</replaceable>). Новые записи не
|
||||
должны включать это поле. Поле должно быть добавлено после
|
||||
редактирования существующей записи.</para>
|
||||
</callout>
|
||||
</calloutlist>
|
||||
</sect2>
|
||||
<callout arearefs="co-vx-dsc">
|
||||
<para>Дата последнего изменения любой информации данной
|
||||
записи (<replaceable>YYYY-MM-DD</replaceable>). Новые
|
||||
записи не должны включать это поле. Поле должно быть
|
||||
добавлено после редактирования существующей
|
||||
записи.</para>
|
||||
</callout>
|
||||
</calloutlist>
|
||||
</sect2>
|
||||
|
||||
<sect2 xml:id="security-notify-vuxml-testing">
|
||||
<title>Тестирование ваших изменений в базе данных VuXML</title>
|
||||
<sect2 xml:id="security-notify-vuxml-testing">
|
||||
<title>Тестирование ваших изменений в базе данных VuXML</title>
|
||||
|
||||
<para>Предположим, что вы только что написали или заполнили запись
|
||||
об уязвимости в пакете <literal>clamav</literal>, которая была
|
||||
исправлена в версии <literal>0.65_7</literal>.</para>
|
||||
<para>Предположим, что вы только что написали или заполнили
|
||||
запись об уязвимости в пакете <literal>clamav</literal>,
|
||||
которая была исправлена в версии
|
||||
<literal>0.65_7</literal>.</para>
|
||||
|
||||
<para>Прежде всего, вам нужно <emphasis>установить</emphasis>
|
||||
последние версии портов
|
||||
<package role="port">ports-mgmt/portaudit</package>,
|
||||
<package role="port">ports-mgmt/portaudit-db</package> и
|
||||
<package role="port">security/vuxml</package>.</para>
|
||||
<para>Прежде всего, вам нужно <emphasis>установить</emphasis>
|
||||
последние версии портов
|
||||
<package role="port">ports-mgmt/portaudit</package>,
|
||||
<package role="port">ports-mgmt/portaudit-db</package> и
|
||||
<package role="port">security/vuxml</package>.</para>
|
||||
|
||||
<note>
|
||||
<para>Для запуска <command>packaudit</command> вы должны обладать
|
||||
правами на запись в
|
||||
<filename>DATABASEDIR</filename>; как правило,
|
||||
это <filename>/var/db/portaudit</filename>.</para>
|
||||
<note>
|
||||
<para>Для запуска <command>packaudit</command> вы должны
|
||||
обладать правами на запись в
|
||||
<filename>DATABASEDIR</filename>; как правило, это
|
||||
<filename>/var/db/portaudit</filename>.</para>
|
||||
|
||||
<para>Для использования другого каталога присвойте переменной
|
||||
окружения <filename>DATABASEDIR</filename>
|
||||
другой путь.</para>
|
||||
<para>Для использования другого каталога присвойте переменной
|
||||
окружения <filename>DATABASEDIR</filename> другой
|
||||
путь.</para>
|
||||
|
||||
<para>Если вы работаете в каталоге, отличном от
|
||||
<filename>${PORTSDIR}/security/vuxml</filename>, присвойте
|
||||
переменной окружения
|
||||
<filename>VUXMLDIR</filename> путь к каталогу,
|
||||
в котором находится <filename>vuln.xml</filename>.</para>
|
||||
</note>
|
||||
<para>Если вы работаете в каталоге, отличном от
|
||||
<filename>${PORTSDIR}/security/vuxml</filename>, присвойте
|
||||
переменной окружения <filename>VUXMLDIR</filename> путь к
|
||||
каталогу, в котором находится
|
||||
<filename>vuln.xml</filename>.</para>
|
||||
</note>
|
||||
|
||||
<para>Во-первых, проверьте, нет ли уже записи об этой уязвимости.
|
||||
Если такая запись есть, она совпадёт с предыдущей версией
|
||||
пакета <literal>0.65_6</literal>:</para>
|
||||
<para>Во-первых, проверьте, нет ли уже записи об этой
|
||||
уязвимости. Если такая запись есть, она совпадёт с
|
||||
предыдущей версией пакета <literal>0.65_6</literal>:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>packaudit</userinput>
|
||||
<screen>&prompt.user; <userinput>packaudit</userinput>
|
||||
&prompt.user; <userinput>portaudit clamav-0.65_6</userinput></screen>
|
||||
|
||||
<para>Если ничего не найдено, значит вы получили зеленый свет для
|
||||
добавления новой записи для этой уязвимости.</para>
|
||||
<para>Если ничего не найдено, значит вы получили зеленый свет
|
||||
для добавления новой записи для этой уязвимости.</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>cd ${PORTSDIR}/security/vuxml</userinput>
|
||||
<screen>&prompt.user; <userinput>cd ${PORTSDIR}/security/vuxml</userinput>
|
||||
&prompt.user; <userinput>make newentry</userinput></screen>
|
||||
|
||||
<para>Когда вы закончите, проверьте синтаксис и форматирование.</para>
|
||||
<para>Когда вы закончите, проверьте синтаксис и
|
||||
форматирование.</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>make validate</userinput></screen>
|
||||
<screen>&prompt.user; <userinput>make validate</userinput></screen>
|
||||
|
||||
<note>
|
||||
<para>Вам понадобится установить по крайней мере один из следующих
|
||||
пакетов: <package role="port">textproc/libxml2</package>,
|
||||
<package role="port">textproc/jade</package>.</para>
|
||||
</note>
|
||||
<note>
|
||||
<para>Вам понадобится установить по крайней мере один из
|
||||
следующих пакетов:
|
||||
<package role="port">textproc/libxml2</package>,
|
||||
<package role="port">textproc/jade</package>.</para>
|
||||
</note>
|
||||
|
||||
<para>Теперь выполните перепостроение базы данных
|
||||
<command>portaudit</command> из файла VuXML:</para>
|
||||
<para>Теперь выполните перепостроение базы данных
|
||||
<command>portaudit</command> из файла VuXML:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>packaudit</userinput></screen>
|
||||
<screen>&prompt.user; <userinput>packaudit</userinput></screen>
|
||||
|
||||
<para>Чтобы убедиться, что раздел <literal><affected></literal>
|
||||
в вашей записи совпадает с правильными пакетами, выполните
|
||||
следующую команду:</para>
|
||||
<para>Чтобы убедиться, что раздел
|
||||
<literal><affected></literal> в вашей записи совпадает
|
||||
с правильными пакетами, выполните следующую команду:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>portaudit -f /usr/ports/INDEX -r uuid</userinput></screen>
|
||||
<screen>&prompt.user; <userinput>portaudit -f /usr/ports/INDEX -r uuid</userinput></screen>
|
||||
|
||||
<note>
|
||||
<para>Для лучшего понимания синтаксиса этой команды обращайтесь
|
||||
к &man.portaudit.1;.</para>
|
||||
</note>
|
||||
<note>
|
||||
<para>Для лучшего понимания синтаксиса этой команды
|
||||
обращайтесь к &man.portaudit.1;.</para>
|
||||
</note>
|
||||
|
||||
<para>Убедитесь, что ваша запись не производит ложных совпадений
|
||||
в выводе.</para>
|
||||
<para>Убедитесь, что ваша запись не производит ложных
|
||||
совпадений в выводе.</para>
|
||||
|
||||
<para>Теперь проверьте, совпадает ли ваша запись с нужными версиями
|
||||
пакета:</para>
|
||||
<para>Теперь проверьте, совпадает ли ваша запись с нужными
|
||||
версиями пакета:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>portaudit clamav-0.65_6 clamav-0.65_7</userinput>
|
||||
<screen>&prompt.user; <userinput>portaudit clamav-0.65_6 clamav-0.65_7</userinput>
|
||||
Affected package: clamav-0.65_6 (matched by clamav<0.65_7)
|
||||
Type of problem: clamav remote denial-of-service.
|
||||
Reference: <http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html>
|
||||
|
||||
1 problem(s) found.</screen>
|
||||
|
||||
<para>Первая версия должна совпасть, а последняя
|
||||
нет.</para>
|
||||
<para>Первая версия должна совпасть, а последняя нет.</para>
|
||||
|
||||
<para>В заключение проверьте, что веб-страница, сформированная из
|
||||
базы данных VuXML, выглядит как положено:</para>
|
||||
<para>В заключение проверьте, что веб-страница, сформированная
|
||||
из базы данных VuXML, выглядит как положено:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>mkdir -p ~/public_html/portaudit</userinput>
|
||||
<screen>&prompt.user; <userinput>mkdir -p ~/public_html/portaudit</userinput>
|
||||
&prompt.user; <userinput>packaudit</userinput>
|
||||
&prompt.user; <userinput>lynx ~/public_html/portaudit/74a9541d-5d6c-11d8-80e3-0020ed76ef5a.html</userinput></screen>
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
||||
</sect2>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
|
@ -7,428 +7,441 @@
|
|||
Original revision: r43840
|
||||
-->
|
||||
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="slow-porting">
|
||||
<chapter xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
|
||||
xml:id="slow-porting">
|
||||
|
||||
<title>Медленное портирование</title>
|
||||
<title>Медленное портирование</title>
|
||||
|
||||
<para>Итак, все оказалось не так уж и просто, и порт потребовал
|
||||
некоторых модификаций для того, чтобы заставить его работать. В этом
|
||||
разделе мы расскажем, шаг за шагом, как его модифицировать, чтобы он
|
||||
работал с нашей системой портов.</para>
|
||||
<para>Итак, все оказалось не так уж и просто, и порт потребовал
|
||||
некоторых модификаций для того, чтобы заставить его работать. В
|
||||
этом разделе мы расскажем, шаг за шагом, как его модифицировать,
|
||||
чтобы он работал с нашей системой портов.</para>
|
||||
|
||||
<sect1 xml:id="slow-work">
|
||||
<title>Как всё это работает</title>
|
||||
<sect1 xml:id="slow-work">
|
||||
<title>Как всё это работает</title>
|
||||
|
||||
<para>Во-первых, когда пользователь дает в своем каталоге с портом
|
||||
команду <command>make</command>, происходит целая череда событий.
|
||||
Во время чтения этого текста может оказаться полезным иметь файл
|
||||
<filename>bsd.port.mk</filename> открытым в другом окне, что сильно
|
||||
поможет в их понимании.</para>
|
||||
<para>Во-первых, когда пользователь дает в своем каталоге с
|
||||
портом команду <command>make</command>, происходит целая череда
|
||||
событий. Во время чтения этого текста может оказаться полезным
|
||||
иметь файл <filename>bsd.port.mk</filename> открытым в другом
|
||||
окне, что сильно поможет в их понимании.</para>
|
||||
|
||||
<para>Но не волнуйтесь сильно, если вы не до конца понимаете, что
|
||||
делается в <filename>bsd.port.mk</filename>, не так уж много людей
|
||||
его понимает... <!-- smiley --><emphasis>:-></emphasis></para>
|
||||
<para>Но не волнуйтесь сильно, если вы не до конца понимаете, что
|
||||
делается в <filename>bsd.port.mk</filename>, не так уж много
|
||||
людей его понимает... <emphasis>:-></emphasis></para>
|
||||
|
||||
<procedure>
|
||||
<step>
|
||||
<para>Запускается цель <buildtarget>fetch</buildtarget>. Цель
|
||||
<buildtarget>fetch</buildtarget> отвечает за то, что архив исходных
|
||||
текстов имеется в наличии локально в каталоге
|
||||
<varname>DISTDIR</varname>. Если цель
|
||||
<buildtarget>fetch</buildtarget> не может найти требуемые файлы в
|
||||
каталоге <varname>DISTDIR</varname>, то они будут искаться по
|
||||
указателю URL <varname>MASTER_SITES</varname>, который
|
||||
устанавливается в Makefile, а также на наших FTP зеркалах,
|
||||
куда мы по возможности помещаем дистрибутивные файлы для архива.
|
||||
Затем она попытается сгрузить указанный файл с помощью
|
||||
<varname>FETCH</varname>, полагая, что запрашивающая машина имеет
|
||||
прямое подключение к Интернет. Если файл скачается удачно, то
|
||||
он будет помещен в каталог <varname>DISTDIR</varname> для
|
||||
последующего использования и обработки.</para>
|
||||
</step>
|
||||
<procedure>
|
||||
<step>
|
||||
<para>Запускается цель <buildtarget>fetch</buildtarget>.
|
||||
Цель <buildtarget>fetch</buildtarget> отвечает за то, что
|
||||
архив исходных текстов имеется в наличии локально в
|
||||
каталоге <varname>DISTDIR</varname>. Если цель
|
||||
<buildtarget>fetch</buildtarget> не может найти требуемые
|
||||
файлы в каталоге <varname>DISTDIR</varname>, то они будут
|
||||
искаться по указателю URL <varname>MASTER_SITES</varname>,
|
||||
который устанавливается в Makefile, а также на наших FTP
|
||||
зеркалах, куда мы по возможности помещаем дистрибутивные
|
||||
файлы для архива. Затем она попытается сгрузить указанный
|
||||
файл с помощью <varname>FETCH</varname>, полагая, что
|
||||
запрашивающая машина имеет прямое подключение к Интернет.
|
||||
Если файл скачается удачно, то он будет помещен в каталог
|
||||
<varname>DISTDIR</varname> для последующего использования и
|
||||
обработки.</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>Выполняется цель <buildtarget>extract</buildtarget>. Она ищет
|
||||
дистрибутивный файл порта (как правило, tar-архив
|
||||
<command>gzip</command>) в
|
||||
каталоге <varname>DISTDIR</varname> и распаковывает его во
|
||||
временный каталог, задаваемый переменной
|
||||
<varname>WRKDIR</varname> (по умолчанию
|
||||
<filename>work</filename>).</para>
|
||||
</step>
|
||||
<step>
|
||||
<para>Выполняется цель <buildtarget>extract</buildtarget>.
|
||||
Она ищет дистрибутивный файл порта (как правило, tar-архив
|
||||
<command>gzip</command>) в каталоге
|
||||
<varname>DISTDIR</varname> и распаковывает его во временный
|
||||
каталог, задаваемый переменной <varname>WRKDIR</varname>
|
||||
(по умолчанию <filename>work</filename>).</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>Выполняется цель <buildtarget>patch</buildtarget>. Во-первых,
|
||||
применяются все патчи, заданные переменной
|
||||
<varname>PATCHFILES</varname>. Во-вторых, если какие-либо файлы с
|
||||
патчами, носящие имена
|
||||
<filename>patch-*</filename>, имеются в
|
||||
подкаталоге <varname>PATCHDIR</varname> (по умолчанию это каталог
|
||||
<filename>files</filename>), то они применяются в этот момент в
|
||||
алфавитном порядке.</para>
|
||||
</step>
|
||||
<step>
|
||||
<para>Выполняется цель <buildtarget>patch</buildtarget>.
|
||||
Во-первых, применяются все патчи, заданные переменной
|
||||
<varname>PATCHFILES</varname>. Во-вторых, если какие-либо
|
||||
файлы с патчами, носящие имена
|
||||
<filename>patch-*</filename>, имеются в подкаталоге
|
||||
<varname>PATCHDIR</varname> (по умолчанию это каталог
|
||||
<filename>files</filename>), то они применяются в этот
|
||||
момент в алфавитном порядке.</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>Запускается цель <buildtarget>configure</buildtarget>. Здесь
|
||||
может выполняться любая из многих различных вещей.</para>
|
||||
<step>
|
||||
<para>Запускается цель <buildtarget>configure</buildtarget>.
|
||||
Здесь может выполняться любая из многих различных
|
||||
вещей.</para>
|
||||
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<para>Если существует скрипт
|
||||
<filename>scripts/configure</filename>, то он запускается.
|
||||
</para>
|
||||
</listitem>
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<para>Если существует скрипт
|
||||
<filename>scripts/configure</filename>, то он
|
||||
запускается.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Если задана переменная <varname>HAS_CONFIGURE</varname>
|
||||
или <varname>GNU_CONFIGURE</varname>, то запускается скрипт
|
||||
<filename>WRKSRC/configure</filename>.
|
||||
</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
</step>
|
||||
<listitem>
|
||||
<para>Если задана переменная
|
||||
<varname>HAS_CONFIGURE</varname> или
|
||||
<varname>GNU_CONFIGURE</varname>, то запускается скрипт
|
||||
<filename>WRKSRC/configure</filename>.</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>Выполняется цель <buildtarget>build</buildtarget>. Она
|
||||
отвечает за переход в собственный рабочий каталог порта
|
||||
(<varname>WRKSRC</varname>) и его построение.</para>
|
||||
</step>
|
||||
<step>
|
||||
<para>Выполняется цель <buildtarget>build</buildtarget>. Она
|
||||
отвечает за переход в собственный рабочий каталог порта
|
||||
(<varname>WRKSRC</varname>) и его построение.</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>Выполняется цель <buildtarget>stage</buildtarget>.
|
||||
Конечный набор построенных файлов помещается во временный
|
||||
каталог (<varname>STAGEDIR</varname>, смотрите
|
||||
<xref linkend="staging"/>). Иерархия этого
|
||||
каталога отражает иерархию каталогов системы, в которую
|
||||
данный пакет будет устанавливаться.</para>
|
||||
</step>
|
||||
<step>
|
||||
<para>Выполняется цель <buildtarget>stage</buildtarget>.
|
||||
Конечный набор построенных файлов помещается во временный
|
||||
каталог (<varname>STAGEDIR</varname>, смотрите <xref
|
||||
linkend="staging"/>). Иерархия этого каталога отражает
|
||||
иерархию каталогов системы, в которую данный пакет будет
|
||||
устанавливаться.</para>
|
||||
</step>
|
||||
|
||||
<step>
|
||||
<para>Выполняется цель <buildtarget>install</buildtarget>.
|
||||
В систему копируются файлы, перечисленные в pkg-plist
|
||||
порта.</para>
|
||||
</step>
|
||||
</procedure>
|
||||
<step>
|
||||
<para>Выполняется цель <buildtarget>install</buildtarget>.
|
||||
В систему копируются файлы, перечисленные в pkg-plist
|
||||
порта.</para>
|
||||
</step>
|
||||
</procedure>
|
||||
|
||||
<para>Выше перечислены стандартные действия. Кроме того, вы сами
|
||||
можете определить цели
|
||||
<buildtarget>pre-<replaceable>что-то</replaceable></buildtarget> или
|
||||
<buildtarget>post-<replaceable>что-то</replaceable></buildtarget>,
|
||||
или создать скрипты с такими именами в подкаталоге
|
||||
<filename>scripts</filename>, и они будут запущены до или после
|
||||
выполнения действий по умолчанию.</para>
|
||||
<para>Выше перечислены стандартные действия. Кроме того, вы сами
|
||||
можете определить цели
|
||||
<buildtarget>pre-<replaceable>что-то</replaceable></buildtarget>
|
||||
или
|
||||
<buildtarget>post-<replaceable>что-то</replaceable></buildtarget>,
|
||||
или создать скрипты с такими именами в подкаталоге
|
||||
<filename>scripts</filename>, и они будут запущены до или после
|
||||
выполнения действий по умолчанию.</para>
|
||||
|
||||
<para>Например, если у вас есть цель
|
||||
<buildtarget>post-extract</buildtarget>, определённая в вашем файле
|
||||
<filename>Makefile</filename> и файл <filename>pre-build</filename> в
|
||||
подкаталоге
|
||||
<filename>scripts</filename>, то после выполнения обычных действий по
|
||||
распаковке, будет вызвана цель <buildtarget>post-extract</buildtarget>
|
||||
а скрипт <filename>pre-build</filename> будет выполнен перед
|
||||
запуском стандартных правил построения. Рекомендуется использовать
|
||||
цели из <filename>Makefile</filename>, если действия достаточно
|
||||
просты, потому что в дальнейшем будет проще определить, какие
|
||||
нестандартные действия требует порт.</para>
|
||||
<para>Например, если у вас есть цель
|
||||
<buildtarget>post-extract</buildtarget>, определённая в вашем
|
||||
файле <filename>Makefile</filename> и файл
|
||||
<filename>pre-build</filename> в подкаталоге
|
||||
<filename>scripts</filename>, то после выполнения обычных
|
||||
действий по распаковке, будет вызвана цель
|
||||
<buildtarget>post-extract</buildtarget> а скрипт
|
||||
<filename>pre-build</filename> будет выполнен перед запуском
|
||||
стандартных правил построения. Рекомендуется использовать цели
|
||||
из <filename>Makefile</filename>, если действия достаточно
|
||||
просты, потому что в дальнейшем будет проще определить, какие
|
||||
нестандартные действия требует порт.</para>
|
||||
|
||||
<para>Действия по умолчанию выполняются целями
|
||||
<buildtarget>do-<replaceable>что-то</replaceable></buildtarget> из
|
||||
<filename>bsd.port.mk</filename>. Например, команды для
|
||||
распаковки порта находятся в цели
|
||||
<buildtarget>do-extract</buildtarget>. Если вам не хватает цели по
|
||||
умолчанию, вы можете ее исправить, переопределив цель
|
||||
<buildtarget>do-<replaceable>something</replaceable></buildtarget>
|
||||
в вашем файле <filename>Makefile</filename>.</para>
|
||||
<para>Действия по умолчанию выполняются целями
|
||||
<buildtarget>do-<replaceable>что-то</replaceable></buildtarget>
|
||||
из <filename>bsd.port.mk</filename>. Например, команды для
|
||||
распаковки порта находятся в цели
|
||||
<buildtarget>do-extract</buildtarget>. Если вам не хватает
|
||||
цели по умолчанию, вы можете ее исправить, переопределив цель
|
||||
<buildtarget>do-<replaceable>something</replaceable></buildtarget>
|
||||
в вашем файле <filename>Makefile</filename>.</para>
|
||||
|
||||
<note>
|
||||
<para><quote>Основные</quote> цели (к примеру,
|
||||
<buildtarget>extract</buildtarget>, <buildtarget>configure</buildtarget>
|
||||
и так далее) не делают ничего больше,
|
||||
чем проверяют успешность завершения всех предыдущих шагов и
|
||||
вызывают настоящие цели или скрипты, и их не нужно менять. Если
|
||||
вам нужно изменить распаковку, исправляйте
|
||||
<buildtarget>do-extract</buildtarget>, но никогда не меняйте способ
|
||||
работы <buildtarget>extract</buildtarget>! Кроме того, цель
|
||||
<buildtarget>post-deinstall</buildtarget> является недействительной
|
||||
и не выполняется инфраструктурой портов.</para>
|
||||
</note>
|
||||
<note>
|
||||
<para><quote>Основные</quote> цели (к примеру,
|
||||
<buildtarget>extract</buildtarget>,
|
||||
<buildtarget>configure</buildtarget> и так далее) не делают
|
||||
ничего больше, чем проверяют успешность завершения всех
|
||||
предыдущих шагов и вызывают настоящие цели или скрипты, и их
|
||||
не нужно менять. Если вам нужно изменить распаковку,
|
||||
исправляйте <buildtarget>do-extract</buildtarget>, но никогда
|
||||
не меняйте способ работы <buildtarget>extract</buildtarget>!
|
||||
Кроме того, цель <buildtarget>post-deinstall</buildtarget>
|
||||
является недействительной и не выполняется инфраструктурой
|
||||
портов.</para>
|
||||
</note>
|
||||
|
||||
<para>Теперь, когда вы представляете, что происходит, когда
|
||||
пользователь набирает команду <command>make install</command>,
|
||||
давайте пройдемся
|
||||
через шаги, рекомендуемые для создания настоящего порта.</para>
|
||||
</sect1>
|
||||
<para>Теперь, когда вы представляете, что происходит, когда
|
||||
пользователь набирает команду <command>make install</command>,
|
||||
давайте пройдемся через шаги, рекомендуемые для создания
|
||||
настоящего порта.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="slow-sources">
|
||||
<title>Получение исходного кода</title>
|
||||
<sect1 xml:id="slow-sources">
|
||||
<title>Получение исходного кода</title>
|
||||
|
||||
<para>Получите оригинальные исходные тексты (обычно) в виде
|
||||
упакованного tar-архива
|
||||
(<filename>foo.tar.gz</filename> или
|
||||
<filename>foo.tar.bz2</filename>)
|
||||
и скопируйте его в каталог <varname>DISTDIR</varname>. Всегда
|
||||
используйте исходные тексты <emphasis>основной ветки
|
||||
разработки</emphasis> везде, где это возможно.</para>
|
||||
<para>Получите оригинальные исходные тексты (обычно) в виде
|
||||
упакованного tar-архива (<filename>foo.tar.gz</filename> или
|
||||
<filename>foo.tar.bz2</filename>) и скопируйте его в каталог
|
||||
<varname>DISTDIR</varname>. Всегда используйте исходные тексты
|
||||
<emphasis>основной ветки разработки</emphasis> везде, где это
|
||||
возможно.</para>
|
||||
|
||||
<para>Вам потребуется задать значение переменной
|
||||
<varname>MASTER_SITES</varname> так, чтобы оно указывало на
|
||||
местоположение оригинального tar-архива. В файле
|
||||
<filename>bsd.sites.mk</filename> вы найдёте краткие обозначения
|
||||
для большинства популярных сайтов. Пожалуйста, используйте эти
|
||||
сайты—и соответствующие определения—везде, где это
|
||||
возможно, чтобы избежать проблем повторения одной и той же информации
|
||||
в базе источников. Так как эти сайты со временем меняются, для
|
||||
всех причастных поддержка становится настоящим кошмаром.</para>
|
||||
<para>Вам потребуется задать значение переменной
|
||||
<varname>MASTER_SITES</varname> так, чтобы оно указывало на
|
||||
местоположение оригинального tar-архива. В файле
|
||||
<filename>bsd.sites.mk</filename> вы найдёте краткие
|
||||
обозначения для большинства популярных сайтов. Пожалуйста,
|
||||
используйте эти сайты—и соответствующие
|
||||
определения—везде, где это возможно, чтобы избежать
|
||||
проблем повторения одной и той же информации в базе источников.
|
||||
Так как эти сайты со временем меняются, для всех причастных
|
||||
поддержка становится настоящим кошмаром.</para>
|
||||
|
||||
<para>Если вы не можете найти FTP/HTTP сайт с хорошим подключением к
|
||||
сети, или находите только сайты, которые имеют раздражающе
|
||||
нестандартные форматы, то можете захотеть поместить копию на надежный
|
||||
сервер FTP или HTTP, который вам доступен (например, ваша домашняя
|
||||
страница).</para>
|
||||
<para>Если вы не можете найти FTP/HTTP сайт с хорошим
|
||||
подключением к сети, или находите только сайты, которые имеют
|
||||
раздражающе нестандартные форматы, то можете захотеть поместить
|
||||
копию на надежный сервер FTP или HTTP, который вам доступен
|
||||
(например, ваша домашняя страница).</para>
|
||||
|
||||
<para>Если вы не можете найти доступного и надёжного места для
|
||||
помещения дистрибутивного файла, то мы сами сможем разместить его на
|
||||
сервере <systemitem>ftp.FreeBSD.org</systemitem>; однако это наименее
|
||||
рекомендуемое решение. Дистрибутивный файл должен
|
||||
быть помещён в каталог <filename>~/public_distfiles/</filename>
|
||||
одного из пользователей машины <systemitem>freefall</systemitem>. Попросите
|
||||
того, кто коммиттил ваш порт, сделать это. Этот человек также задаст
|
||||
переменной <varname>MASTER_SITES</varname> значение
|
||||
<varname>MASTER_SITE_LOCAL</varname>, а в переменной
|
||||
<varname>MASTER_SITE_SUBDIR</varname> укажет своё имя пользователя
|
||||
с машины <systemitem>freefall</systemitem>.</para>
|
||||
<para>Если вы не можете найти доступного и надёжного места для
|
||||
помещения дистрибутивного файла, то мы сами сможем разместить
|
||||
его на сервере <systemitem>ftp.FreeBSD.org</systemitem>; однако
|
||||
это наименее рекомендуемое решение. Дистрибутивный файл должен
|
||||
быть помещён в каталог <filename>~/public_distfiles/</filename>
|
||||
одного из пользователей машины
|
||||
<systemitem>freefall</systemitem>. Попросите того, кто
|
||||
коммиттил ваш порт, сделать это. Этот человек также задаст
|
||||
переменной <varname>MASTER_SITES</varname> значение
|
||||
<varname>MASTER_SITE_LOCAL</varname>, а в переменной
|
||||
<varname>MASTER_SITE_SUBDIR</varname> укажет своё имя
|
||||
пользователя с машины <systemitem>freefall</systemitem>.</para>
|
||||
|
||||
<para>Если дистрибутивные файлы вашего порта постоянно меняются по
|
||||
неизвестным причинам без изменения версий со стороны автора, остаётся
|
||||
только поместить дистрибутив на вашу домашнюю Web-страницу и указать
|
||||
её первой в списке <varname>MASTER_SITES</varname>. Если можете,
|
||||
попытайтесь договориться с автором порта об этом; это действительно
|
||||
помогает в достижении некоторого управления исходным кодом.
|
||||
Размещение собственной версии поможет избежать появления ошибок у
|
||||
пользователей типа <errorname>checksum mismatch</errorname>, а
|
||||
также уменьшит нагрузку на людей, сопровождающих наш FTP-сервер.
|
||||
Также, если у порта имеется только один основной сервер, то
|
||||
рекомендуется поместить архивную копию на свой сайт и указать его в
|
||||
списке <varname>MASTER_SITES</varname> вторым.</para>
|
||||
<para>Если дистрибутивные файлы вашего порта постоянно меняются
|
||||
по неизвестным причинам без изменения версий со стороны автора,
|
||||
остаётся только поместить дистрибутив на вашу домашнюю
|
||||
Web-страницу и указать её первой в списке
|
||||
<varname>MASTER_SITES</varname>. Если можете, попытайтесь
|
||||
договориться с автором порта об этом; это действительно
|
||||
помогает в достижении некоторого управления исходным кодом.
|
||||
Размещение собственной версии поможет избежать появления ошибок
|
||||
у пользователей типа <errorname>checksum mismatch</errorname>,
|
||||
а также уменьшит нагрузку на людей, сопровождающих наш
|
||||
FTP-сервер. Также, если у порта имеется только один основной
|
||||
сервер, то рекомендуется поместить архивную копию на свой сайт
|
||||
и указать его в списке <varname>MASTER_SITES</varname>
|
||||
вторым.</para>
|
||||
|
||||
<para>Если вашему порту требуются дополнительные `патчи', доступные
|
||||
в Интернет, скачайте также и их, поместив в каталог
|
||||
<varname>DISTDIR</varname>. Не волнуйтесь, если они находятся не
|
||||
на том же сайте, откуда взят дистрибутивный архив, мы умеем
|
||||
обрабатывать такие ситуации (смотрите описание <link linkend="porting-patchfiles">PATCHFILES</link> ниже).</para>
|
||||
</sect1>
|
||||
<para>Если вашему порту требуются дополнительные `патчи',
|
||||
доступные в Интернет, скачайте также и их, поместив в каталог
|
||||
<varname>DISTDIR</varname>. Не волнуйтесь, если они находятся
|
||||
не на том же сайте, откуда взят дистрибутивный архив, мы умеем
|
||||
обрабатывать такие ситуации (смотрите описание <link
|
||||
linkend="porting-patchfiles">PATCHFILES</link> ниже).</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="slow-modifying">
|
||||
<title>Модификация порта</title>
|
||||
<sect1 xml:id="slow-modifying">
|
||||
<title>Модификация порта</title>
|
||||
|
||||
<para>Распакуйте копию дистрибутивного файла в отдельный каталог и
|
||||
внесите изменения, которые необходимы для того, чтобы порт
|
||||
компилировался нормально в текущей версии &os;.
|
||||
<emphasis>Тщательно отслеживайте</emphasis> все, что вы делаете,
|
||||
этот процесс вам предстоит автоматизировать. Все, включая удаление,
|
||||
добавление или модификацию в файлах должны будут выполняться
|
||||
автоматически с помощью скриптов или файлов патчей, когда вы
|
||||
завершите работу над портом.</para>
|
||||
<para>Распакуйте копию дистрибутивного файла в отдельный каталог
|
||||
и внесите изменения, которые необходимы для того, чтобы порт
|
||||
компилировался нормально в текущей версии &os;.
|
||||
<emphasis>Тщательно отслеживайте</emphasis> все, что вы
|
||||
делаете, этот процесс вам предстоит автоматизировать. Все,
|
||||
включая удаление, добавление или модификацию в файлах должны
|
||||
будут выполняться автоматически с помощью скриптов или файлов
|
||||
патчей, когда вы завершите работу над портом.</para>
|
||||
|
||||
<para>Если вашему порту во время компиляции, установки и настройки
|
||||
требуется довольно много взаимодействовать с пользователем, то
|
||||
посмотрите на один из классических скриптов
|
||||
<application>Configure</application> Лэрри Уолла (Larry Wall) и
|
||||
сделайте сами что-либо подобное. Предназначение новой коллекции
|
||||
портов - это сделать каждое приложение в стиле
|
||||
<quote>plug-and-play</quote> настолько, насколько это вообще возможно
|
||||
для конечного пользователя при минимальном использовании дискового
|
||||
пространства.</para>
|
||||
<para>Если вашему порту во время компиляции, установки и
|
||||
настройки требуется довольно много взаимодействовать с
|
||||
пользователем, то посмотрите на один из классических скриптов
|
||||
<application>Configure</application> Лэрри Уолла (Larry Wall) и
|
||||
сделайте сами что-либо подобное. Предназначение новой
|
||||
коллекции портов - это сделать каждое приложение в стиле
|
||||
<quote>plug-and-play</quote> настолько, насколько это вообще
|
||||
возможно для конечного пользователя при минимальном
|
||||
использовании дискового пространства.</para>
|
||||
|
||||
<note>
|
||||
<para>Если явно не указано обратное, то патчи, скрипты и другие
|
||||
файлы, которые вы создали и предоставили для Коллекции Портов
|
||||
&os;, неявно подпадают под стандартные условия лицензии
|
||||
BSD.</para>
|
||||
</note>
|
||||
</sect1>
|
||||
<note>
|
||||
<para>Если явно не указано обратное, то патчи, скрипты и другие
|
||||
файлы, которые вы создали и предоставили для Коллекции Портов
|
||||
&os;, неявно подпадают под стандартные условия лицензии
|
||||
BSD.</para>
|
||||
</note>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="slow-patch">
|
||||
<title>Создание патчей</title>
|
||||
<sect1 xml:id="slow-patch">
|
||||
<title>Создание патчей</title>
|
||||
|
||||
<para>Файлы, которые добавлялись или изменялись в процессе создания
|
||||
порта, могут быть выявлены программой &man.diff.1;,
|
||||
а результат работы этой программы может быть в дальнейшем передан
|
||||
программе &man.patch.1;. Такое действие с обычным файлом
|
||||
подразумевает сохранение копии файла с первоначальным содержимым
|
||||
перед внесением каких-либо изменений.</para>
|
||||
<para>Файлы, которые добавлялись или изменялись в процессе
|
||||
создания порта, могут быть выявлены программой &man.diff.1;, а
|
||||
результат работы этой программы может быть в дальнейшем передан
|
||||
программе &man.patch.1;. Такое действие с обычным файлом
|
||||
подразумевает сохранение копии файла с первоначальным
|
||||
содержимым перед внесением каких-либо изменений.</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>cp <replaceable>file</replaceable> <replaceable>file</replaceable>.orig</userinput></screen>
|
||||
<screen>&prompt.user; <userinput>cp <replaceable>file</replaceable> <replaceable>file</replaceable>.orig</userinput></screen>
|
||||
|
||||
<para>Патчи сохраняются в виде файлов с именем
|
||||
<filename>patch-*</filename>, где
|
||||
<replaceable>*</replaceable> обозначает путь к файлу,
|
||||
к которому применяется патч, такой как
|
||||
<filename>patch-Imakefile</filename> или
|
||||
<filename>patch-src-config.h</filename>.</para>
|
||||
<para>Патчи сохраняются в виде файлов с именем
|
||||
<filename>patch-*</filename>, где <replaceable>*</replaceable>
|
||||
обозначает путь к файлу, к которому применяется патч, такой как
|
||||
<filename>patch-Imakefile</filename> или
|
||||
<filename>patch-src-config.h</filename>.</para>
|
||||
|
||||
<para>После того как файл был изменён, используется &man.diff.1;
|
||||
для получения разницы между первоначальной и изменённой
|
||||
версиями. Параметр <option>-u</option> указывает &man.diff.1;
|
||||
выводить разницу в <quote>унифицированном</quote> формате,
|
||||
который также является предпочтительным.</para>
|
||||
<para>После того как файл был изменён, используется &man.diff.1;
|
||||
для получения разницы между первоначальной и изменённой
|
||||
версиями. Параметр <option>-u</option> указывает &man.diff.1;
|
||||
выводить разницу в <quote>унифицированном</quote> формате,
|
||||
который также является предпочтительным.</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>diff -u <replaceable>file</replaceable>.orig <replaceable>file</replaceable> > patch-<replaceable>pathname-file</replaceable></userinput></screen>
|
||||
<screen>&prompt.user; <userinput>diff -u <replaceable>file</replaceable>.orig <replaceable>file</replaceable> > patch-<replaceable>pathname-file</replaceable></userinput></screen>
|
||||
|
||||
<para>Для порождении патчей для новых добавляемых файлов
|
||||
используется параметр <option>-N</option>, который заставляет
|
||||
&man.diff.1; трактовать несуществующие прежде файлы как если
|
||||
бы они существовали, но имели пустое содержимое:</para>
|
||||
<para>Для порождении патчей для новых добавляемых файлов
|
||||
используется параметр <option>-N</option>, который заставляет
|
||||
&man.diff.1; трактовать несуществующие прежде файлы как если бы
|
||||
они существовали, но имели пустое содержимое:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>diff -u -N <replaceable>newfile</replaceable>.orig <replaceable>newfile</replaceable> > patch-<replaceable>pathname-newfile</replaceable></userinput></screen>
|
||||
<screen>&prompt.user; <userinput>diff -u -N <replaceable>newfile</replaceable>.orig <replaceable>newfile</replaceable> > patch-<replaceable>pathname-newfile</replaceable></userinput></screen>
|
||||
|
||||
<para>Файлы с патчами помещаются в
|
||||
каталоге <varname>PATCHDIR</varname>
|
||||
(как правило, это <filename class="directory">files/</filename>),
|
||||
откуда они будут взяты автоматически. Все патчи обязаны быть сделаны
|
||||
относительно каталога <varname>WRKSRC</varname> (как правило,
|
||||
это каталог, в который распаковывается исходный архив и где будет
|
||||
выполняться построение). Для упрощения внесения изменений и
|
||||
обновлений избегайте наличия более чем одного патча для
|
||||
одного и того же файла (например, патчей
|
||||
<filename>patch-file</filename> и <filename>patch-file2</filename>,
|
||||
оба меняющих файл <filename>WRKSRC/foobar.c</filename>).
|
||||
Обратите внимание, что если путь к изменяемому файлу содержит символ
|
||||
подчеркивания (<literal>_</literal>), то патч должен содержать в своем
|
||||
имени два подчеркивания вместо одного. Например, для применения патча
|
||||
на файл с именем <filename>src/freeglut_joystick.c</filename>
|
||||
соответствующий патч следует назвать
|
||||
<filename>patch-src-freeglut__joystick.c</filename>.</para>
|
||||
<para>Файлы с патчами помещаются в каталоге
|
||||
<varname>PATCHDIR</varname> (как правило, это <filename
|
||||
class="directory">files/</filename>), откуда они будут взяты
|
||||
автоматически. Все патчи обязаны быть сделаны относительно
|
||||
каталога <varname>WRKSRC</varname> (как правило, это каталог, в
|
||||
который распаковывается исходный архив и где будет выполняться
|
||||
построение). Для упрощения внесения изменений и обновлений
|
||||
избегайте наличия более чем одного патча для одного и того же
|
||||
файла (например, патчей <filename>patch-file</filename> и
|
||||
<filename>patch-file2</filename>, оба меняющих файл
|
||||
<filename>WRKSRC/foobar.c</filename>). Обратите внимание, что
|
||||
если путь к изменяемому файлу содержит символ подчеркивания
|
||||
(<literal>_</literal>), то патч должен содержать в своем имени
|
||||
два подчеркивания вместо одного. Например, для применения
|
||||
патча на файл с именем
|
||||
<filename>src/freeglut_joystick.c</filename> соответствующий
|
||||
патч следует назвать
|
||||
<filename>patch-src-freeglut__joystick.c</filename>.</para>
|
||||
|
||||
<para>Пожалуйста, используйте для именования патчей только символы
|
||||
<literal>[-+._a-zA-Z0-9]</literal>. Не используйте любые другие
|
||||
символы, кроме этих. Не называйте патчи как
|
||||
<filename>patch-aa</filename> или <filename>patch-ab</filename>,
|
||||
всегда ссылайтесь на путь и название файла в названиях самих
|
||||
патчей.</para>
|
||||
<para>Пожалуйста, используйте для именования патчей только
|
||||
символы <literal>[-+._a-zA-Z0-9]</literal>. Не используйте
|
||||
любые другие символы, кроме этих. Не называйте патчи как
|
||||
<filename>patch-aa</filename> или
|
||||
<filename>patch-ab</filename>, всегда ссылайтесь на путь и
|
||||
название файла в названиях самих патчей.</para>
|
||||
|
||||
<para>Существует альтернативный упрощённый способ создания
|
||||
патчей для существующих файлов. Первые шаги те же самые:
|
||||
создание копии неизменённого файла с расширением
|
||||
<filename>.orig</filename> и внесение изменений. После этого
|
||||
используйте <command>make makepatch</command>, чтобы обновить
|
||||
файлы с патчами в каталоге <filename>files</filename> данного
|
||||
порта.</para>
|
||||
<para>Существует альтернативный упрощённый способ создания патчей
|
||||
для существующих файлов. Первые шаги те же самые: создание
|
||||
копии неизменённого файла с расширением
|
||||
<filename>.orig</filename> и внесение изменений. После этого
|
||||
используйте <command>make makepatch</command>, чтобы обновить
|
||||
файлы с патчами в каталоге <filename>files</filename> данного
|
||||
порта.</para>
|
||||
|
||||
<para>Не помещайте строки RCS в патчи.
|
||||
<application>Subversion</application> будет изменять их при
|
||||
помещении файлов в дерево портов, и когда мы будем их оттуда
|
||||
извлекать, они будут уже другие, поэтому применение патчей
|
||||
окончится неудачей. Строчки RCS предваряются знаком доллара
|
||||
(<literal>$</literal>), и обычно начинаются с
|
||||
<literal>$Id</literal> или
|
||||
<literal>$RCS</literal>.</para>
|
||||
<para>Не помещайте строки RCS в патчи.
|
||||
<application>Subversion</application> будет изменять их при
|
||||
помещении файлов в дерево портов, и когда мы будем их оттуда
|
||||
извлекать, они будут уже другие, поэтому применение патчей
|
||||
окончится неудачей. Строчки RCS предваряются знаком доллара
|
||||
(<literal>$</literal>), и обычно начинаются с
|
||||
<literal>$Id</literal> или
|
||||
<literal>$RCS</literal>.</para>
|
||||
|
||||
<para>Использование параметра рекурсии (<option>-r</option>) с командой
|
||||
&man.diff.1; для генерации патчей - это хорошо, но всё же,
|
||||
пожалуйста, смотрите на получающиеся патчи, чтобы убедиться в
|
||||
отсутствии ненужного мусора. В частности, diff-разниц между двумя
|
||||
резервными копиями файлов, файлы <filename>Makefile</filename>, когда
|
||||
как порт использует <command>Imake</command> или
|
||||
GNU-версию программы <command>configure</command>, и так далее,
|
||||
не нужны, и должны быть удалены. Если было необходимо
|
||||
отредактировать файл <filename>configure.in</filename> и
|
||||
запустить <command>autoconf</command> для перегенерации
|
||||
<command>configure</command>, не нужно включать файлы diff для
|
||||
<command>configure</command> (они частенько вырастают до нескольких
|
||||
тысяч строк!). Вместо этого задайте
|
||||
<literal>USE_AUTOTOOLS=autoconf:261</literal> и
|
||||
включите diff-файл для <filename>configure.in</filename>.</para>
|
||||
<para>Использование параметра рекурсии (<option>-r</option>) с
|
||||
командой &man.diff.1; для генерации патчей - это хорошо, но всё
|
||||
же, пожалуйста, смотрите на получающиеся патчи, чтобы убедиться
|
||||
в отсутствии ненужного мусора. В частности, diff-разниц между
|
||||
двумя резервными копиями файлов, файлы
|
||||
<filename>Makefile</filename>, когда как порт использует
|
||||
<command>Imake</command> или GNU-версию программы
|
||||
<command>configure</command>, и так далее, не нужны, и должны
|
||||
быть удалены. Если было необходимо отредактировать файл
|
||||
<filename>configure.in</filename> и запустить
|
||||
<command>autoconf</command> для перегенерации
|
||||
<command>configure</command>, не нужно включать файлы diff для
|
||||
<command>configure</command> (они частенько вырастают до
|
||||
нескольких тысяч строк!). Вместо этого задайте
|
||||
<literal>USE_AUTOTOOLS=autoconf:261</literal> и включите
|
||||
diff-файл для <filename>configure.in</filename>.</para>
|
||||
|
||||
<para>Старайтесь минимизировать в патчах объём
|
||||
нефункциональных изменений с пустыми символами. В мире Открытого
|
||||
Исходного Кода является распространенным совместное использование
|
||||
проектами больших объемов кодовой базы, но с различными стилями
|
||||
и правилами отступов. При копировании работающей функциональной
|
||||
части из одного проекта для исправления похожей области в другом,
|
||||
будьте аккуратны, пожалуйста: получаемый однострочный патч
|
||||
может указаться полон нефункциональных изменений. Это не только
|
||||
увеличивает размер репозитория <application>Subversion</application>,
|
||||
но также усложняет поиск того,
|
||||
что конкретно вызвало проблему и что вообще поменялось.</para>
|
||||
<para>Старайтесь минимизировать в патчах объём нефункциональных
|
||||
изменений с пустыми символами. В мире Открытого Исходного Кода
|
||||
является распространенным совместное использование проектами
|
||||
больших объемов кодовой базы, но с различными стилями и
|
||||
правилами отступов. При копировании работающей функциональной
|
||||
части из одного проекта для исправления похожей области в
|
||||
другом, будьте аккуратны, пожалуйста: получаемый однострочный
|
||||
патч может указаться полон нефункциональных изменений. Это не
|
||||
только увеличивает размер репозитория
|
||||
<application>Subversion</application>, но также усложняет поиск
|
||||
того, что конкретно вызвало проблему и что вообще
|
||||
поменялось.</para>
|
||||
|
||||
<para>Если нужно удалить файл, сделайте это при выполнении цели
|
||||
<buildtarget>post-extract</buildtarget>, вместо того чтобы
|
||||
оформлять это как часть патча.</para>
|
||||
<para>Если нужно удалить файл, сделайте это при выполнении цели
|
||||
<buildtarget>post-extract</buildtarget>, вместо того чтобы
|
||||
оформлять это как часть патча.</para>
|
||||
|
||||
<para>Простые перемещения могут быть выполнены непосредственно из
|
||||
<filename>Makefile</filename> порта с использованием &man.sed.1; в
|
||||
режиме in-place. Это удобно, когда при изменении используется
|
||||
значение переменной:</para>
|
||||
<para>Простые перемещения могут быть выполнены непосредственно из
|
||||
<filename>Makefile</filename> порта с использованием
|
||||
&man.sed.1; в режиме in-place. Это удобно, когда при изменении
|
||||
используется значение переменной:</para>
|
||||
|
||||
<programlisting>post-patch:
|
||||
<programlisting>post-patch:
|
||||
@${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README</programlisting>
|
||||
|
||||
<para>Довольно часто в исходных файлах портируемого программного
|
||||
обеспечения используется конвенция CR/LF. Это может стать
|
||||
причиной проблем с дальнейшей упаковкой, предупреждениями
|
||||
компилятора или выполнением скриптов (таких как
|
||||
<literal>/bin/sh^M not found</literal>). Для быстрого
|
||||
преобразования всех файлов из CR/LF просто в LF добавьте
|
||||
в <filename>Makefile</filename> порта эту запись:</para>
|
||||
<para>Довольно часто в исходных файлах портируемого программного
|
||||
обеспечения используется конвенция CR/LF. Это может стать
|
||||
причиной проблем с дальнейшей упаковкой, предупреждениями
|
||||
компилятора или выполнением скриптов (таких как
|
||||
<literal>/bin/sh^M not found</literal>). Для быстрого
|
||||
преобразования всех файлов из CR/LF просто в LF добавьте в
|
||||
<filename>Makefile</filename> порта эту запись:</para>
|
||||
|
||||
<programlisting>USES= dos2unix</programlisting>
|
||||
<programlisting>USES= dos2unix</programlisting>
|
||||
|
||||
<para>Может быть задан точный список преобразуемых файлов:</para>
|
||||
<para>Может быть задан точный список преобразуемых файлов:</para>
|
||||
|
||||
<programlisting>USES= dos2unix
|
||||
<programlisting>USES= dos2unix
|
||||
DOS2UNIX_FILES= util.c util.h</programlisting>
|
||||
|
||||
<para>Используйте <varname>DOS2UNIX_REGEX</varname>, чтобы
|
||||
преобразовать группу файлов в разных подкаталогах.
|
||||
Его параметром является регулярное выражение, совместимое с
|
||||
&man.find.1;. Подробнее о формате в &man.re.format.7;.
|
||||
Такой вариант удобен для преобразования всех файлов заданного
|
||||
расширения. Для примера, преобразуем все исходные файлы,
|
||||
не затрагивая двоичные файлы:</para>
|
||||
<para>Используйте <varname>DOS2UNIX_REGEX</varname>, чтобы
|
||||
преобразовать группу файлов в разных подкаталогах. Его
|
||||
параметром является регулярное выражение, совместимое с
|
||||
&man.find.1;. Подробнее о формате в &man.re.format.7;. Такой
|
||||
вариант удобен для преобразования всех файлов заданного
|
||||
расширения. Для примера, преобразуем все исходные файлы, не
|
||||
затрагивая двоичные файлы:</para>
|
||||
|
||||
<programlisting>USES= dos2unix
|
||||
<programlisting>USES= dos2unix
|
||||
DOS2UNIX_REGEX= .*\.([ch]|cpp)</programlisting>
|
||||
|
||||
<para>Другим вариантом является использование
|
||||
<varname>DOS2UNIX_GLOB</varname>, который вызывает
|
||||
<command>find</command> для каждого из перечисленных в нём
|
||||
элементов.</para>
|
||||
<para>Другим вариантом является использование
|
||||
<varname>DOS2UNIX_GLOB</varname>, который вызывает
|
||||
<command>find</command> для каждого из перечисленных в нём
|
||||
элементов.</para>
|
||||
|
||||
<programlisting>USES= dos2unix
|
||||
<programlisting>USES= dos2unix
|
||||
DOS2UNIX_GLOB= *.c *.cpp *.h</programlisting>
|
||||
</sect1>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="slow-configure">
|
||||
<title>Конфигурирование</title>
|
||||
<sect1 xml:id="slow-configure">
|
||||
<title>Конфигурирование</title>
|
||||
|
||||
<para>Поместите все дополнительные команды, требуемые для настройки,
|
||||
в ваш скрипт <filename>configure</filename> и сохраните его в
|
||||
подкаталоге <filename>scripts</filename>. Как отмечено выше, вы
|
||||
можете сделать это целями в файле <filename>Makefile</filename>
|
||||
и/или скриптами с именами <filename>pre-configure</filename> или
|
||||
<filename>post-configure</filename>.</para>
|
||||
</sect1>
|
||||
<para>Поместите все дополнительные команды, требуемые для
|
||||
настройки, в ваш скрипт <filename>configure</filename> и
|
||||
сохраните его в подкаталоге <filename>scripts</filename>. Как
|
||||
отмечено выше, вы можете сделать это целями в файле
|
||||
<filename>Makefile</filename> и/или скриптами с именами
|
||||
<filename>pre-configure</filename> или
|
||||
<filename>post-configure</filename>.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="slow-user-input">
|
||||
<title>Обработка пользовательского ввода</title>
|
||||
<sect1 xml:id="slow-user-input">
|
||||
<title>Обработка пользовательского ввода</title>
|
||||
|
||||
<para>Если для построения, конфигурации или установки вашего порта
|
||||
требуется некоторый ввод со стороны пользователя, то вы должны задать
|
||||
переменную <varname>IS_INTERACTIVE</varname> в вашем файле
|
||||
<filename>Makefile</filename>. В случае <quote>ночного
|
||||
построения</quote> это позволит пропустить
|
||||
ваш порт, если пользователь в своем окружении задал переменную
|
||||
<envar>BATCH</envar> (и если пользователь установил переменную
|
||||
<envar>INTERACTIVE</envar>, то будут строиться
|
||||
<emphasis>только</emphasis> порты, которые требуют взаимодействия
|
||||
с пользователем. Это сэкономит значительное количество времени на
|
||||
части машин, которые постоянно строят порты (смотрите ниже).</para>
|
||||
|
||||
<para>При наличии разумных ответов на задаваемые вопросы, подходящих по
|
||||
умолчанию, также рекомендуется проверять переменную
|
||||
<varname>PACKAGE_BUILDING</varname> и выключать интерактивный скрипт,
|
||||
если он есть. Это позволит нам строить пакеты для помещения на
|
||||
компакт-диски и FTP-серверы.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<para>Если для построения, конфигурации или установки вашего
|
||||
порта требуется некоторый ввод со стороны пользователя, то вы
|
||||
должны задать переменную <varname>IS_INTERACTIVE</varname> в
|
||||
вашем файле <filename>Makefile</filename>. В случае
|
||||
<quote>ночного построения</quote> это позволит пропустить ваш
|
||||
порт, если пользователь в своем окружении задал переменную
|
||||
<envar>BATCH</envar> (и если пользователь установил переменную
|
||||
<envar>INTERACTIVE</envar>, то будут строиться
|
||||
<emphasis>только</emphasis> порты, которые требуют
|
||||
взаимодействия с пользователем. Это сэкономит значительное
|
||||
количество времени на части машин, которые постоянно строят
|
||||
порты (смотрите ниже).</para>
|
||||
|
||||
<para>При наличии разумных ответов на задаваемые вопросы,
|
||||
подходящих по умолчанию, также рекомендуется проверять
|
||||
переменную <varname>PACKAGE_BUILDING</varname> и выключать
|
||||
интерактивный скрипт, если он есть. Это позволит нам строить
|
||||
пакеты для помещения на компакт-диски и FTP-серверы.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -7,191 +7,208 @@
|
|||
Original revision: r43840
|
||||
-->
|
||||
|
||||
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="testing">
|
||||
<chapter xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
|
||||
xml:id="testing">
|
||||
|
||||
<title>Тестирование вашего порта</title>
|
||||
<title>Тестирование вашего порта</title>
|
||||
|
||||
<sect1 xml:id="make-describe">
|
||||
<title>Запуск <command>make describe</command></title>
|
||||
<sect1 xml:id="make-describe">
|
||||
<title>Запуск <command>make describe</command></title>
|
||||
|
||||
<para>Некоторые утилиты &os; для сопровождения портов, например,
|
||||
&man.portupgrade.1;, опираются на базу данных с именем
|
||||
<filename>/usr/ports/INDEX</filename>, в которой отслеживаются такие
|
||||
характеристики портов, как их зависимости. Файл
|
||||
<filename>INDEX</filename> создаётся при помощи
|
||||
<filename>ports/Makefile</filename> верхнего уровня по команде
|
||||
<command>make index</command>, спускающейся в подкаталог каждого
|
||||
порта и выполняющей в нём <command>make describe</command>. Таким
|
||||
образом, если выполнение <command>make describe</command> с
|
||||
каким-либо портом завершится неудачно, то никому не удастся создать
|
||||
<filename>INDEX</filename>, при этом много людей вскоре станут
|
||||
несчастны.</para>
|
||||
<para>Некоторые утилиты &os; для сопровождения портов, например,
|
||||
&man.portupgrade.1;, опираются на базу данных с именем
|
||||
<filename>/usr/ports/INDEX</filename>, в которой отслеживаются
|
||||
такие характеристики портов, как их зависимости. Файл
|
||||
<filename>INDEX</filename> создаётся при помощи
|
||||
<filename>ports/Makefile</filename> верхнего уровня по команде
|
||||
<command>make index</command>, спускающейся в подкаталог
|
||||
каждого порта и выполняющей в нём <command>make
|
||||
describe</command>. Таким образом, если выполнение
|
||||
<command>make describe</command> с каким-либо портом завершится
|
||||
неудачно, то никому не удастся создать
|
||||
<filename>INDEX</filename>, при этом много людей вскоре станут
|
||||
несчастны.</para>
|
||||
|
||||
<note>
|
||||
<para>Возможность генерировать этот файл очень важна вне зависимости
|
||||
от того, какие параметры присутствуют в
|
||||
<filename>make.conf</filename>, поэтому, пожалуйста, избегайте,
|
||||
таких вещей, как использование декларации
|
||||
<literal>.error</literal>, когда (к примеру) требования к
|
||||
зависимости не было удовлетворено. (Смотрите
|
||||
<xref linkend="dads-dot-error"/>.)</para>
|
||||
</note>
|
||||
<note>
|
||||
<para>Возможность генерировать этот файл очень важна вне
|
||||
зависимости от того, какие параметры присутствуют в
|
||||
<filename>make.conf</filename>, поэтому, пожалуйста,
|
||||
избегайте, таких вещей, как использование декларации
|
||||
<literal>.error</literal>, когда (к примеру) требования к
|
||||
зависимости не было удовлетворено. (Смотрите
|
||||
<xref linkend="dads-dot-error"/>.)</para>
|
||||
</note>
|
||||
|
||||
<para>Если команда <command>make describe</command> выдаёт строчку, а
|
||||
не ошибку, то для вас это пройдёт безболезненно. Обратитесь к файлу
|
||||
<filename>bsd.port.mk</filename>, чтобы выяснить значение выдаваемых
|
||||
строк.</para>
|
||||
<para>Если <command>make describe</command> выдаёт строчку, а не
|
||||
ошибку, то для вас это пройдёт безболезненно. Обратитесь к
|
||||
файлу <filename>bsd.port.mk</filename>, чтобы выяснить значение
|
||||
выдаваемых строк.</para>
|
||||
|
||||
<para>Заметьте также, что запуск последней версии
|
||||
<command>portlint</command> (как указано в следующем разделе)
|
||||
приведёт к автоматическому запуску команды
|
||||
<command>make describe</command>.</para>
|
||||
</sect1>
|
||||
<para>Заметьте также, что запуск последней версии
|
||||
<command>portlint</command> (как указано в следующем разделе)
|
||||
приведёт к автоматическому запуску команды
|
||||
<command>make describe</command>.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="testing-portlint">
|
||||
<title>Portlint</title>
|
||||
<sect1 xml:id="testing-portlint">
|
||||
<title>Portlint</title>
|
||||
|
||||
<para>Проверьте свою работу командой <link linkend="porting-portlint"><command>portlint</command></link>
|
||||
перед тем, как её отослать или перенести в дерево портов.
|
||||
<command>portlint</command> предупреждает вас о многих
|
||||
распространённых ошибках, как функциональных, так и стилистических.
|
||||
Для нового (или скопированного внутри хранилища) порта самым
|
||||
подходящим является запуск <command>portlint -A</command>; для
|
||||
уже существующего порта достаточно будет запустить
|
||||
<command>portlint -C</command>.</para>
|
||||
<para>Проверьте свою работу командой <link
|
||||
linkend="porting-portlint"><command>portlint</command></link>
|
||||
перед тем, как её отослать или перенести в дерево портов.
|
||||
<command>portlint</command> предупреждает вас о многих
|
||||
распространённых ошибках, как функциональных, так и
|
||||
стилистических. Для нового (или скопированного внутри
|
||||
хранилища) порта самым подходящим является запуск
|
||||
<command>portlint -A</command>; для уже существующего порта
|
||||
достаточно будет запустить
|
||||
<command>portlint -C</command>.</para>
|
||||
|
||||
<para>Так как для обнаружения ошибок <command>portlint</command>
|
||||
использует эвристические методы, то им могут выдаваться и ошибочные
|
||||
предупреждения. Кроме того, время от времени нечто, отмечаемое как
|
||||
некорректность, из-за ограничений механизма создания портов не может
|
||||
быть сделано никак иначе. Если вы сомневаетесь, то лучше всего
|
||||
спросить в &a.ports;.</para>
|
||||
</sect1>
|
||||
<para>Так как для обнаружения ошибок <command>portlint</command>
|
||||
использует эвристические методы, то им могут выдаваться и
|
||||
ошибочные предупреждения. Кроме того, время от времени нечто,
|
||||
отмечаемое как некорректность, из-за ограничений механизма
|
||||
создания портов не может быть сделано никак иначе. Если вы
|
||||
сомневаетесь, то лучше всего спросить в &a.ports;.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="testing-porttools">
|
||||
<title>Port Tools</title>
|
||||
<sect1 xml:id="testing-porttools">
|
||||
<title>Port Tools</title>
|
||||
|
||||
<para>Программа <package role="port">ports-mgmt/porttools</package>
|
||||
входит в состав Коллекции Портов.</para>
|
||||
<para>Программа <package
|
||||
role="port">ports-mgmt/porttools</package> входит в состав
|
||||
Коллекции Портов.</para>
|
||||
|
||||
<para><command>port</command> является сценарием переднего плана,
|
||||
который может упростить вам задачу тестирования. Если вы хотите
|
||||
проверить новый порт или обновить существующий, то вы можете
|
||||
использовать <command>port test</command> для проверки вашего порта,
|
||||
включая проверку <link linkend="testing-portlint"><command>portlint</command></link>. Эта
|
||||
команда также находит и отображает любые файлы, которые невключенные
|
||||
в <filename>pkg-plist</filename>. Смотрите следующий пример:</para>
|
||||
<para><command>port</command> является сценарием переднего плана,
|
||||
который может упростить вам задачу тестирования. Если вы
|
||||
хотите проверить новый порт или обновить существующий, то вы
|
||||
можете использовать <command>port test</command> для проверки
|
||||
вашего порта, включая проверку <link
|
||||
linkend="testing-portlint"><command>portlint</command></link>.
|
||||
Эта команда также находит и отображает любые файлы, которые
|
||||
невключенные в <filename>pkg-plist</filename>. Смотрите
|
||||
следующий пример:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>port test /usr/ports/net/csup</userinput></screen>
|
||||
</sect1>
|
||||
<screen>&prompt.root; <userinput>port test /usr/ports/net/csup</userinput></screen>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="porting-prefix">
|
||||
<title><varname>PREFIX</varname> и <varname>DESTDIR</varname></title>
|
||||
<sect1 xml:id="porting-prefix">
|
||||
<title><varname>PREFIX</varname> и
|
||||
<varname>DESTDIR</varname></title>
|
||||
|
||||
<para>Переменная <varname>PREFIX</varname> определяет, куда будет
|
||||
установлен порт. По умолчанию это <filename>/usr/local</filename>,
|
||||
но может меняться пользователем на собственный путь, такой как
|
||||
<filename>/opt</filename>. В вашем порту значение этой переменной
|
||||
должно учитываться.</para>
|
||||
<para>Переменная <varname>PREFIX</varname> определяет, куда будет
|
||||
установлен порт. По умолчанию это
|
||||
<filename>/usr/local</filename>, но может меняться
|
||||
пользователем на собственный путь, такой как
|
||||
<filename>/opt</filename>. В вашем порту значение этой
|
||||
переменной должно учитываться.</para>
|
||||
|
||||
<para>Если пользователь установил переменную <varname>DESTDIR</varname>,
|
||||
то она определяет полное альтернативное окружение, обычно, это jail
|
||||
или установленная система, смонтированная в месте, отличном от
|
||||
<filename>/</filename>. На самом деле порт устанавливается в
|
||||
<filename>DESTDIR/PREFIX</filename>
|
||||
и регистрируется в базе данных пакетов в
|
||||
<filename>DESTDIR/var/db/pkg</filename>.
|
||||
Поскольку управление <varname>DESTDIR</varname> производится
|
||||
автоматически инфраструктурой портов с помощью &man.chroot.8;, вам
|
||||
не нужны никакие изменения или проявление особой осторожности
|
||||
при написании <varname>DESTDIR</varname>-совместимых портов.</para>
|
||||
<para>Если пользователь установил переменную
|
||||
<varname>DESTDIR</varname>, то она определяет полное
|
||||
альтернативное окружение, обычно, это jail или установленная
|
||||
система, смонтированная в месте, отличном от
|
||||
<filename>/</filename>. На самом деле порт устанавливается в
|
||||
<filename>DESTDIR/PREFIX</filename> и регистрируется в базе
|
||||
данных пакетов в <filename>DESTDIR/var/db/pkg</filename>.
|
||||
Поскольку управление <varname>DESTDIR</varname> производится
|
||||
автоматически инфраструктурой портов с помощью &man.chroot.8;,
|
||||
вам не нужны никакие изменения или проявление особой
|
||||
осторожности при написании портов, совместымых с
|
||||
<varname>DESTDIR</varname>.</para>
|
||||
|
||||
<para>Значение переменной <varname>PREFIX</varname> будет установлено
|
||||
в <varname>LOCALBASE</varname> (по умолчанию
|
||||
<filename>/usr/local</filename>). Если
|
||||
задана переменная <varname>USE_LINUX_PREFIX</varname>, то
|
||||
<varname>PREFIX</varname> примет значение <varname>LINUXBASE</varname>
|
||||
(по умолчанию <filename>/compat/linux</filename>).</para>
|
||||
<para>Значение переменной <varname>PREFIX</varname> будет
|
||||
установлено в <varname>LOCALBASE</varname> (по умолчанию
|
||||
<filename>/usr/local</filename>). Если задана переменная
|
||||
<varname>USE_LINUX_PREFIX</varname>, то
|
||||
<varname>PREFIX</varname> примет значение
|
||||
<varname>LINUXBASE</varname> (по умолчанию
|
||||
<filename>/compat/linux</filename>).</para>
|
||||
|
||||
<para>Избегание явно прописываемых путей <filename>/usr/local</filename>
|
||||
в исходном коде сделает порт гораздо более гибким и способным
|
||||
удовлетворить потребности других серверов. Часто этого можно
|
||||
добиться простой заменой строк <filename>/usr/local</filename>
|
||||
в различных файлах <filename>Makefile</filename> внутри порта на
|
||||
<literal>${PREFIX}</literal>. Эта переменная
|
||||
автоматически передаётся далее на каждом этапе построения и
|
||||
установки.</para>
|
||||
<para>Избегание явно прописываемых путей
|
||||
<filename>/usr/local</filename> в исходном коде сделает порт
|
||||
гораздо более гибким и способным удовлетворить потребности
|
||||
других серверов. Часто этого можно добиться простой заменой
|
||||
строк <filename>/usr/local</filename> в различных файлах
|
||||
<filename>Makefile</filename> внутри порта на
|
||||
<literal>${PREFIX}</literal>. Эта переменная
|
||||
автоматически передаётся далее на каждом этапе построения и
|
||||
установки.</para>
|
||||
|
||||
<para>Проверьте, что ваше приложение не устанавливает чего-либо в
|
||||
каталог <filename>/usr/local</filename> вместо
|
||||
<varname>PREFIX</varname>. Наличие явно указанных путей можно быстро
|
||||
проверить следующим образом:</para>
|
||||
<para>Проверьте, что ваше приложение не устанавливает чего-либо в
|
||||
каталог <filename>/usr/local</filename> вместо
|
||||
<varname>PREFIX</varname>. Наличие явно указанных путей можно
|
||||
быстро проверить следующим образом:</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen>
|
||||
<screen>&prompt.root; <userinput>make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen>
|
||||
|
||||
<para>Если что-то было установлено за пределами
|
||||
<varname>PREFIX</varname>, то процесс создания пакета сообщит об
|
||||
отсутствии файлов.</para>
|
||||
<para>Если что-то было установлено за пределами
|
||||
<varname>PREFIX</varname>, то процесс создания пакета сообщит
|
||||
об отсутствии файлов.</para>
|
||||
|
||||
<para>Это также стоит проверить с использованием поддержки
|
||||
каталога сборки (смотрите <xref linkend="staging"/>):</para>
|
||||
<para>Это также стоит проверить с использованием поддержки
|
||||
каталога сборки (смотрите <xref linkend="staging"/>):</para>
|
||||
|
||||
<screen>&prompt.root; <userinput>make stage && make check-orphans && make package</userinput></screen>
|
||||
<screen>&prompt.root; <userinput>make stage && make check-orphans && make package</userinput></screen>
|
||||
|
||||
<para>Эти проверки не найдут явно указанных путей внутри файлов порта
|
||||
и не проверят корректность использования <varname>LOCALBASE</varname>
|
||||
в качестве ссылки на файлы из других портов. Порт, временно
|
||||
установленный в <filename>/var/tmp/`make -V PORTNAME`</filename>,
|
||||
следует проверять на работоспособность, чтобы убедиться в отсутствии
|
||||
проблем с путями.</para>
|
||||
<para>Эти проверки не найдут явно указанных путей внутри файлов
|
||||
порта и не проверят корректность использования
|
||||
<varname>LOCALBASE</varname> в качестве ссылки на файлы из
|
||||
других портов. Порт, временно установленный в
|
||||
<filename>/var/tmp/`make -V PORTNAME`</filename>, следует
|
||||
проверять на работоспособность, чтобы убедиться в отсутствии
|
||||
проблем с путями.</para>
|
||||
|
||||
<para>Переменная <varname>PREFIX</varname> не должна задаваться явно в
|
||||
файле <filename>Makefile</filename> порта. Пользователи при установке
|
||||
порта могут задать в <varname>PREFIX</varname> свое собственное
|
||||
место, и порт должен учитывать это значение.</para>
|
||||
<para>Переменная <varname>PREFIX</varname> не должна задаваться
|
||||
явно в файле <filename>Makefile</filename> порта. Пользователи
|
||||
при установке порта могут задать в <varname>PREFIX</varname>
|
||||
свое собственное место, и порт должен учитывать это
|
||||
значение.</para>
|
||||
|
||||
<para>Обратитесь к программам/файлам из других портов с
|
||||
переменными, перечисленными выше, без указания явных маршрутов.
|
||||
Например, если ваш порт требует, чтобы макрос <literal>PAGER</literal>
|
||||
являлся полным путем утилиты <command>less</command>, не используйте
|
||||
строковый путь <filename>/usr/local/bin/less</filename>. Вместо
|
||||
этого используйте <literal>${LOCALBASE}</literal>:</para>
|
||||
<para>Обратитесь к программам/файлам из других портов с
|
||||
переменными, перечисленными выше, без указания явных маршрутов.
|
||||
Например, если ваш порт требует, чтобы макрос
|
||||
<literal>PAGER</literal> являлся полным путем утилиты
|
||||
<command>less</command>, не используйте строковый путь
|
||||
<filename>/usr/local/bin/less</filename>. Вместо этого
|
||||
используйте <literal>${LOCALBASE}</literal>:</para>
|
||||
|
||||
<programlisting>-DPAGER=\"${LOCALBASE}/bin/less\"</programlisting>
|
||||
<programlisting>-DPAGER=\"${LOCALBASE}/bin/less\"</programlisting>
|
||||
|
||||
<para>Путь с использованием <varname>LOCALBASE</varname> имеет больше
|
||||
шансов оставаться работоспособным, если системный администратор
|
||||
переместил всё дерево <filename>/usr/local</filename> куда-то в другое
|
||||
место.</para>
|
||||
</sect1>
|
||||
<para>Путь с использованием <varname>LOCALBASE</varname> имеет
|
||||
больше шансов оставаться работоспособным, если системный
|
||||
администратор переместил всё дерево
|
||||
<filename>/usr/local</filename> куда-то в другое место.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="testing-tinderbox">
|
||||
<title>Tinderbox</title>
|
||||
<sect1 xml:id="testing-tinderbox">
|
||||
<title>Tinderbox</title>
|
||||
|
||||
<para>Если вы алчный контрибутор портов, то вы можете захотеть
|
||||
взглянуть на <application>Tinderbox</application>. Это мощная
|
||||
система построения и тестирования портов.
|
||||
<application>Tinderbox</application> можно установить, используя
|
||||
порт <package role="port">ports-mgmt/tinderbox</package>.
|
||||
Обязательно прочитайте поставляемую документацию, поскольку
|
||||
конфигурация не является тривиальной.</para>
|
||||
<para>Если вы алчный контрибутор портов, то вы можете захотеть
|
||||
взглянуть на <application>Tinderbox</application>. Это мощная
|
||||
система построения и тестирования портов.
|
||||
<application>Tinderbox</application> можно установить,
|
||||
используя порт <package
|
||||
role="port">ports-mgmt/tinderbox</package>. Обязательно
|
||||
прочитайте поставляемую документацию, поскольку конфигурация не
|
||||
является тривиальной.</para>
|
||||
|
||||
<para>Для получения подробностей посетите
|
||||
<link xlink:href="http://tinderbox.marcuscom.com/">вебсайт Tinderbox</link>.</para>
|
||||
</sect1>
|
||||
<para>Для получения подробностей посетите <link
|
||||
xlink:href="http://tinderbox.marcuscom.com/">вебсайт
|
||||
Tinderbox</link>.</para>
|
||||
</sect1>
|
||||
|
||||
<sect1 xml:id="testing-poudriere">
|
||||
<title>Poudriere</title>
|
||||
<sect1 xml:id="testing-poudriere">
|
||||
<title>Poudriere</title>
|
||||
|
||||
<para>Если вы контрибутор портов, подумайте об установке
|
||||
<application>poudriere</application>. Это мощная система
|
||||
для построения и тестирования портов.
|
||||
<application>Poudriere</application> можно установить из
|
||||
<package role="port">ports-mgmt/poudriere</package>.</para>
|
||||
|
||||
<para>Для получения подробной информации посетите <link
|
||||
xlink:href="http://fossil.etoilebsd.net/poudriere">вебсайт
|
||||
Poudriere</link>.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<para>Если вы контрибутор портов, подумайте об установке
|
||||
<application>poudriere</application>. Это мощная система для
|
||||
построения и тестирования портов.
|
||||
<application>Poudriere</application> можно установить из
|
||||
<package role="port">ports-mgmt/poudriere</package>.</para>
|
||||
|
||||
<para>Для получения подробной информации посетите <link
|
||||
xlink:href="http://fossil.etoilebsd.net/poudriere">вебсайт
|
||||
Poudriere</link>.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
|
@ -7,294 +7,305 @@
|
|||
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">
|
||||
<chapter xmlns="http://docbook.org/ns/docbook"
|
||||
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
|
||||
xml:id="port-upgrading">
|
||||
|
||||
<title>Обновление отдельного порта</title>
|
||||
<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>Если вы заметите, что ваш порт устарел по сравнению с
|
||||
последней авторской версией, первым делом вы должны получить
|
||||
самую последнюю версия порта. Вы можете найти их в каталоге
|
||||
<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>На следующем шаге необходимо выяснить, нет ожидает ли уже это
|
||||
обновление своей очереди. Для этого у вас есть две возможности.
|
||||
Существует интерфейс к <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">Просмотра
|
||||
<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>Если таких отложенных PR не существует, то на следующем этапе
|
||||
следует послать сообщение электронной почты человеку,
|
||||
поддерживающему порт, который выдаётся по команде <command>make
|
||||
maintainer</command>. Этот человек может уже работать над
|
||||
обновлением, или иметь причину не обновлять порт прямо сейчас
|
||||
(например, из-за проблем со стабильностью функционирования новой
|
||||
версии); вам нет нужды дублировать их работу. Заметьте, что
|
||||
неподдерживаемые порты перечисляются с адресом сопровождающего
|
||||
<literal>ports@FreeBSD.org</literal>, который является всего лишь
|
||||
адресом общего списка рассылки, так что отправка туда сообщений,
|
||||
скорее всего, в данном случае не поможет.</para>
|
||||
|
||||
<para>Если сопровождающий просит вас выполнить обновление, либо
|
||||
сопровождающий отсутствует, то у вас появляется шанс помочь &os;,
|
||||
приготовив обновление самим! Пожалуйста, делайте это с использованием
|
||||
команды &man.diff.1; в основной системе.</para>
|
||||
<para>Если сопровождающий просит вас выполнить обновление, либо
|
||||
сопровождающий отсутствует, то у вас появляется шанс помочь &os;,
|
||||
приготовив обновление самим! Пожалуйста, делайте это с
|
||||
использованием команды &man.diff.1; в основной системе.</para>
|
||||
|
||||
<para>Чтобы создать подходящий <command>diff</command> для одного патча,
|
||||
скопируйте файл, который нужно пропатчить, в
|
||||
<replaceable>something.orig</replaceable>, сохраните ваши изменения в
|
||||
<replaceable>something</replaceable>, а затем создайте ваше патч:</para>
|
||||
<para>Чтобы создать подходящий <command>diff</command> для одного
|
||||
патча, скопируйте файл, который нужно пропатчить, в
|
||||
<replaceable>something.orig</replaceable>, сохраните ваши
|
||||
изменения в <replaceable>something</replaceable>, а затем
|
||||
создайте ваше патч:</para>
|
||||
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>diff -u something.orig something > something.diff</userinput></screen>
|
||||
</informalexample>
|
||||
<informalexample>
|
||||
<screen>&prompt.user; <userinput>diff -u something.orig something > 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>—это одобряемый способ
|
||||
заставить diff корректно работать в случае добавления новых файлов или
|
||||
удаления старых. Перед тем, как посылать нам diff-файл, пожалуйста,
|
||||
проверьте его, чтобы убедиться в значимости всех внесённых
|
||||
изменений. (В частности, убедитесь, что вы очистили рабочие каталоги
|
||||
командой <command>make clean</command>).</para>
|
||||
<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>—это одобряемый способ заставить 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>Для упрощения повторяющихся операций с файлами заплаток вы
|
||||
можете воспользоваться скриптом
|
||||
<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>Если порт никем не поддерживается, а вы активно его
|
||||
используете, пожалуйста, подумайте над тем, чтобы добровольно
|
||||
стать его сопровождающим. Во &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>Лучше всего послать нам 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>
|
||||
<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>
|
||||
<important>
|
||||
<para>Если обновление вызвано соображениями информационной
|
||||
безопасности или наличием серьёзных ошибок в имеющемся порте,
|
||||
пожалуйста, оповестите &a.portmgr; о необходимости немедленного
|
||||
перепостроения и повторного распространения пакета данного
|
||||
порта. В противном случае ничего не подозревающие пользователи
|
||||
<command>pkg</command> будут продолжать устанавливать старую
|
||||
версию по команде <command>pkg install</command> в течение ещё
|
||||
нескольких недель.</para>
|
||||
</important>
|
||||
|
||||
<note>
|
||||
<para>Повторяем еще раз - для посылки обновлений существующих портов
|
||||
используйте утилиту &man.diff.1;, а не &man.shar.1;! Это поможет
|
||||
понять коммиттерам портов, что именно было изменено.</para>
|
||||
</note>
|
||||
<note>
|
||||
<para>Повторяем еще раз - для посылки обновлений существующих
|
||||
портов используйте утилиту &man.diff.1;, а не &man.shar.1;!
|
||||
Это поможет понять коммиттерам портов, что именно было
|
||||
изменено.</para>
|
||||
</note>
|
||||
|
||||
<para>Теперь, когда вы проделали всё это, прочитайте о том, как
|
||||
поддерживать актуальное состояние, в <xref linkend="keeping-up"/>.</para>
|
||||
<para>Теперь, когда вы проделали всё это, прочитайте о том, как
|
||||
поддерживать актуальное состояние, в <xref
|
||||
linkend="keeping-up"/>.</para>
|
||||
|
||||
<sect1 xml:id="svn-diff">
|
||||
<title>Использование <application>Subversion</application> для
|
||||
создания патчей</title>
|
||||
<sect1 xml:id="svn-diff">
|
||||
<title>Использование <application>Subversion</application> для
|
||||
создания патчей</title>
|
||||
|
||||
<para>По возможности присылайте исправления в формате &man.svn.1; diff.
|
||||
В таком виде их проще использовать по сравнению с разницей между
|
||||
<quote>старым и новым</quote> каталогами. Так проще
|
||||
увидеть изменения и обновить их в случае, если что-нибудь
|
||||
изменилось в Коллекции Портов с тех пор, как вы начали работу,
|
||||
либо если коммиттер просит что-то исправить.</para>
|
||||
<para>По возможности присылайте исправления в формате &man.svn.1;
|
||||
diff. В таком виде их проще использовать по сравнению с
|
||||
разницей между <quote>старым и новым</quote> каталогами. Так
|
||||
проще увидеть изменения и обновить их в случае, если что-нибудь
|
||||
изменилось в Коллекции Портов с тех пор, как вы начали работу,
|
||||
либо если коммиттер просит что-то исправить.</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>cd ~/my_wrkdir</userinput> <co xml:id="my-wrkdir"/>
|
||||
<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>
|
||||
<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>
|
||||
— это общедоступный сервер
|
||||
<application>Subversion</application>.
|
||||
Выберите ближайшее зеркало и проверьте сертификат
|
||||
зеркалирующего сервера на наличие в перечне <link xlink:href="&url.books.handbook;/svn-mirrors.html">зеркалирующих
|
||||
<callout arearefs="svn-FreeBSD-org">
|
||||
<para><link
|
||||
xlink:href="https://svn0.us-west.FreeBSD.org/">svn0.us-west.FreeBSD.org</link>
|
||||
— это общедоступный сервер
|
||||
<application>Subversion</application>. Выберите ближайшее
|
||||
зеркало и проверьте сертификат зеркалирующего сервера на
|
||||
наличие в перечне <link
|
||||
xlink:href="&url.books.handbook;/svn-mirrors.html">зеркалирующих
|
||||
ÓÁÊÔÏ× Subversion</link>.</para>
|
||||
</callout>
|
||||
</calloutlist>
|
||||
</callout>
|
||||
</calloutlist>
|
||||
|
||||
<para>Находясь в рабочем каталоге, вносите любые изменения, которые
|
||||
обычно делают для порта. При добавлении или удалении файла
|
||||
используйте <command>svn</command> для отслеживания этих
|
||||
изменений:</para>
|
||||
<para>Находясь в рабочем каталоге, вносите любые изменения,
|
||||
которые обычно делают для порта. При добавлении или удалении
|
||||
файла используйте <command>svn</command> для отслеживания этих
|
||||
изменений:</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>svn add new_file</userinput>
|
||||
<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>
|
||||
<para>Убедитесь, что вы проверяете порт в соответствии с
|
||||
рекомендуемым порядком проверки, описанным в
|
||||
<xref linkend="porting-testing"/> и
|
||||
<xref linkend="porting-portlint"/>.</para>
|
||||
|
||||
<screen>&prompt.user; <userinput>svn status</userinput>
|
||||
<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>
|
||||
<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>
|
||||
<table pgwide="1" frame="none" xml:id="table-svn-up">
|
||||
<title>Префиксы файлов для
|
||||
<application>Subversion</application> Update</title>
|
||||
|
||||
<tgroup cols="2">
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>U</entry>
|
||||
<tgroup cols="2">
|
||||
<tbody>
|
||||
<row>
|
||||
<entry>U</entry>
|
||||
<entry>Файл обновлен без проблем.</entry>
|
||||
</row>
|
||||
|
||||
<entry>Файл обновлен без проблем.</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>G</entry>
|
||||
<entry>Файл обновлен без проблем (вы увидите это только
|
||||
при работе с удаленным репозиторием).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>G</entry>
|
||||
<row>
|
||||
<entry>M</entry>
|
||||
<entry>Файл с локальными изменениями, слияние выполнено
|
||||
без конфликтов.</entry>
|
||||
</row>
|
||||
|
||||
<entry>Файл обновлен без проблем (вы увидите это только
|
||||
при работе с удаленным репозиторием).</entry>
|
||||
</row>
|
||||
<row>
|
||||
<entry>C</entry>
|
||||
<entry>Файл с локальными изменениями, слияние выполнено
|
||||
с конфликтами.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
|
||||
<row>
|
||||
<entry>M</entry>
|
||||
<para>Если в результате выполнения <literal>svn update</literal>
|
||||
отображается <literal>C</literal>, то это означает, что что-то
|
||||
изменилось в репозитории <application>Subversion</application>
|
||||
и &man.svn.1; не смогла выполнить слияние локальных изменений с
|
||||
полученными из репозитория. В любом случае никогда не помешает
|
||||
просмотреть изменения, поскольку &man.svn.1; ничего не знает о
|
||||
том, каким должен быть порт, поэтому эта команда может (и,
|
||||
вероятно, будет) делать слияние тех изменений, которые не имеют
|
||||
смысла.</para>
|
||||
|
||||
<entry>Файл с локальными изменениями, слияние выполнено
|
||||
без конфликтов.</entry>
|
||||
</row>
|
||||
<para>Последним шагом является создание унифицированного
|
||||
&man.diff.1; для полученных изменений:</para>
|
||||
|
||||
<row>
|
||||
<entry>C</entry>
|
||||
<screen>&prompt.user; <userinput>svn diff > ../`basename ${PWD}`.diff</userinput></screen>
|
||||
|
||||
<entry>Файл с локальными изменениями, слияние выполнено
|
||||
с конфликтами.</entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</table>
|
||||
<note>
|
||||
<para>Информация о любых удаляемых файлов должна быть явным
|
||||
образом указана в PR, поскольку необходимость в удалении
|
||||
файла для коммиттера может быть неочевидна.</para>
|
||||
</note>
|
||||
|
||||
<para>Если в результате выполнения <literal>svn update</literal>
|
||||
отображается <literal>C</literal>, то это означает, что что-то
|
||||
изменилось в репозитории <application>Subversion</application>
|
||||
и &man.svn.1; не смогла выполнить
|
||||
слияние локальных изменений с полученными из репозитория.
|
||||
В любом случае никогда не помешает просмотреть изменения,
|
||||
поскольку &man.svn.1; ничего не знает о том, каким должен быть
|
||||
порт, поэтому эта команда может (и, вероятно, будет) делать
|
||||
слияние тех изменений, которые не имеют смысла.</para>
|
||||
<para>Присылайте свои патчи в соответствии с руководством,
|
||||
описанном в <xref linkend="port-upgrading"/>.</para>
|
||||
</sect1>
|
||||
|
||||
<para>Последним шагом является создание унифицированного &man.diff.1;
|
||||
для полученных изменений:</para>
|
||||
<sect1 xml:id="moved-and-updating-files">
|
||||
<title>Файлы <filename>UPDATING</filename> и
|
||||
<filename>MOVED</filename></title>
|
||||
|
||||
<screen>&prompt.user; <userinput>svn diff > ../`basename ${PWD}`.diff</userinput></screen>
|
||||
<para>Если при обновлении порта требуются специальные шаги, такие
|
||||
как изменение файлов конфигурации или запуск специальной
|
||||
программы, то вам следует это задокументировать в файле
|
||||
<filename>/usr/ports/UPDATING</filename>. Формат записи в этом
|
||||
файле приводится ниже:</para>
|
||||
|
||||
<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:
|
||||
<programlisting>YYYYMMDD:
|
||||
AFFECTS: users of portcategory/portname
|
||||
AUTHOR: Your name <Your email address>
|
||||
|
||||
Special instructions</programlisting>
|
||||
|
||||
<para>Если вы включаете точные инструкции portmaster или portupgrading,
|
||||
пожалуйста, убедитесь в правильном экранировании символов внутри
|
||||
командной оболочки.</para>
|
||||
<para>Если вы включаете точные инструкции portmaster или
|
||||
portupgrade, пожалуйста, убедитесь в правильном экранировании
|
||||
символов внутри командной оболочки.</para>
|
||||
|
||||
<para>Файл <filename>/usr/ports/MOVED</filename> содержит записи
|
||||
об удалённых или перемещённых портах. Каждая строка в этом
|
||||
файле состоит из полей: название порта, место, куда он был
|
||||
перемещён, дата и причина перемещения. Если порт был удалён,
|
||||
то поле, указывающее новое место, может оставаться незаполненным.
|
||||
Поля должны разделяться символом <literal>|</literal> (pipe),
|
||||
как это показано ниже:</para>
|
||||
<para>Файл <filename>/usr/ports/MOVED</filename> содержит записи
|
||||
об удалённых или перемещённых портах. Каждая строка в этом
|
||||
файле состоит из полей: название порта, место, куда он был
|
||||
перемещён, дата и причина перемещения. Если порт был удалён,
|
||||
то поле, указывающее новое место, может оставаться
|
||||
незаполненным. Поля должны разделяться символом
|
||||
<literal>|</literal> (pipe), как это показано ниже:</para>
|
||||
|
||||
<programlisting>old name|new name (blank for deleted)|date of move|reason</programlisting>
|
||||
<programlisting>old name|new name (blank for deleted)|date of move|reason</programlisting>
|
||||
|
||||
<para>Дату следует вводить в формате <literal>YYYY-MM-DD</literal>.
|
||||
Новые записи следует добавлять в конец файла в хронологическом
|
||||
порядке.</para>
|
||||
<para>Дату следует вводить в формате
|
||||
<literal>YYYY-MM-DD</literal>. Новые записи следует добавлять
|
||||
в конец файла в хронологическом порядке.</para>
|
||||
|
||||
<para>Если порт был перемещён, но в дальнейшем восстановлен на
|
||||
прежнем месте, удалите в этом файле строку, содержащую
|
||||
информацию о перемещении.</para>
|
||||
|
||||
<para>Полученные изменения можно проверить командой
|
||||
<command>Tools/scripts/MOVEDlint.awk</command>.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
<para>Если порт был перемещён, но в дальнейшем восстановлен на
|
||||
прежнем месте, удалите в этом файле строку, содержащую
|
||||
информацию о перемещении.</para>
|
||||
|
||||
<para>Полученные изменения можно проверить командой
|
||||
<command>Tools/scripts/MOVEDlint.awk</command>.</para>
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
|
|
@ -156,14 +156,15 @@
|
|||
|
||||
<entry>(ÎÅÔ), ARGS</entry>
|
||||
|
||||
<entry>Устанавливает окружение виртуального дисплея. Если переменная
|
||||
окружения <varname>DISPLAY</varname> не установлена, то
|
||||
<application>Xvfb</application> добавляется как зависимость для
|
||||
построения и <varname>CONFIGURE_ENV</varname> дополняется номером
|
||||
порта текущего запущенного экземпляра <application>Xvfb</application>.
|
||||
Параметр <literal>ARGS</literal> по умолчанию имеет значение
|
||||
<literal>install</literal> и управляет фазой, в которой запускается
|
||||
и останавливается виртуальный дисплей.</entry>
|
||||
<entry>Устанавливает окружение виртуального дисплея. Если
|
||||
переменная окружения <varname>DISPLAY</varname> не установлена,
|
||||
то <application>Xvfb</application> добавляется как зависимость
|
||||
для построения и <varname>CONFIGURE_ENV</varname> дополняется
|
||||
номером порта текущего запущенного экземпляра
|
||||
<application>Xvfb</application>. Параметр
|
||||
<literal>ARGS</literal> по умолчанию имеет значение
|
||||
<literal>install</literal> и управляет фазой, в которой
|
||||
запускается и останавливается виртуальный дисплей.</entry>
|
||||
</row>
|
||||
|
||||
<row xml:id="uses-dos2unix">
|
||||
|
@ -218,7 +219,8 @@
|
|||
<row xml:id="uses-fortran">
|
||||
<entry><literal>fortran</literal></entry>
|
||||
|
||||
<entry><literal>gcc</literal> (default), <literal>ifort</literal></entry>
|
||||
<entry><literal>gcc</literal> (default),
|
||||
<literal>ifort</literal></entry>
|
||||
|
||||
<entry>éÓÐÏÌØÚÕÅÔ ËÏÍÐÉÌÑÔÏÒ Fortran ÏÔ GNU ÉÌÉ Intel.</entry>
|
||||
</row>
|
||||
|
@ -241,7 +243,7 @@
|
|||
<entry>éÓÐÏÌØÚÕÅÔ <package role="port">devel/gettext</package>.
|
||||
ðÏ ÕÍÏÌÞÁÎÉÀ, ÂÅÚ ÁÒÇÕÍÅÎÔÏ× ÉÌÉ Ó ÁÒÇÕÍÅÎÔÏÍ
|
||||
<literal>lib</literal>, ÏÚÎÁÞÁÅÔ ÚÁ×ÉÓÉÍÏÓÔØ ÏÔ ÂÉÂÌÉÏÔÅËÉ
|
||||
<filename>libintl.so</filename>. <literal>build</literal>
|
||||
<filename>libintl.so</filename>. <literal>build</literal>
|
||||
É <literal>run</literal> ÓÏÏÔ×ÅÔÓÔ×ÅÎÎÏ ÏÚÎÁÞÁÀÔ ÚÁ×ÉÓÉÍÏÓÔÉ ÏÔ
|
||||
ÏÔ <filename>xgettext</filename> ÄÌÑ ÓÂÏÒËÉ É ×ÙÐÏÌÎÅÎÉÑ.</entry>
|
||||
</row>
|
||||
|
@ -265,8 +267,8 @@
|
|||
|
||||
<entry>éÓÐÏÌØÚÕÅÔ ÆÕÎËÃÉÉ <command>iconv</command>, ÉÚ ÐÏÒÔÁ
|
||||
<package role="port">converters/libiconv</package> ËÁË ÚÁ×ÉÓÉÍÏÓÔØ
|
||||
для сборки и выполнения или же из основной системы на 10-CURRENT после
|
||||
появления собственного <command>iconv</command> в
|
||||
для сборки и выполнения или же из основной системы на 10-CURRENT
|
||||
после появления собственного <command>iconv</command> в
|
||||
<revnumber>254273</revnumber>. ðÏ ÕÍÏÌÞÁÎÉÀ, ÂÅÚ ÐÁÒÁÍÅÔÒÏ× ÉÌÉ
|
||||
Ó ÐÁÒÁÍÅÔÒÏÍ <literal>lib</literal>, <command>iconv</command>
|
||||
ÏÚÎÁÞÁÅÔ ÚÁ×ÉÓÉÍÏÓÔØ ÄÌÑ ÓÂÏÒËÉ É ×ÙÐÏÌÎÅÎÉÑ,
|
||||
|
@ -393,15 +395,16 @@
|
|||
<row xml:id="uses-openal">
|
||||
<entry><literal>openal</literal></entry>
|
||||
|
||||
<entry><literal>al</literal>, <literal>soft</literal> (по умолчанию),
|
||||
<literal>si</literal>, <literal>alut</literal></entry>
|
||||
<entry><literal>al</literal>, <literal>soft</literal> (по
|
||||
умолчанию), <literal>si</literal>, <literal>alut</literal></entry>
|
||||
|
||||
<entry>éÓÐÏÌØÚÕÅÔ <application>OpenAL</application>. íÏÖÅÔ ÂÙÔØ
|
||||
ÕËÁÚÁÎ ÂÜËÜÎÄ, ÐÏ ÕÍÏÌÞÁÎÉÀ ÉÓÐÏÌØÚÕÅÔÓÑ ÐÒÏÇÒÁÍÍÎÁÑ ÒÅÁÌÉÚÁÃÉÑ.
|
||||
ðÏÌØÚÏ×ÁÔÅÌØ ÍÏÖÅÔ ÕËÁÚÁÔØ ÐÒÅÄÐÏÞÉÔÁÅÍÙÊ ÂÜËÜÎÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ
|
||||
ÐÅÒÅËÌÀÞÁÔÅÌÑ <varname>WANT_OPENAL</varname>. ðÒÁ×ÉÌØÎÙÍÉ
|
||||
значениями для этого переключателя являются <literal>soft</literal>
|
||||
(по умолчанию) и <literal>si</literal>.</entry>
|
||||
значениями для этого переключателя являются
|
||||
<literal>soft</literal> (по умолчанию) и
|
||||
<literal>si</literal>.</entry>
|
||||
</row>
|
||||
|
||||
<row xml:id="uses-pathfix">
|
||||
|
@ -521,7 +524,7 @@
|
|||
ÏÚÎÁÞÁÅÔ ÚÁ×ÉÓÉÍÏÓÔØ ÄÌÑ ÓÂÏÒËÉ É <literal>run</literal> ÄÌÑ
|
||||
×ÙÐÏÌÎÅÎÉÑ. âÅÚ ÁÒÇÕÍÅÎÔÏ× ÉÌÉ Ó ÁÒÇÕÍÅÎÔÏÍ
|
||||
<literal>both</literal> <command>qmail</command> ÏÚÎÁÞÁÅÔ
|
||||
зависимость для сборки и выполнения. <literal>vars</literal>
|
||||
зависимость для сборки и выполнения. <literal>vars</literal>
|
||||
ÚÁÄÁÅÔ ÐÅÒÅÍÅÎÎÙÅ QMAIL ÄÌÑ ÎÕÖÄ ÐÏÒÔÁ.</entry>
|
||||
</row>
|
||||
|
||||
|
@ -567,8 +570,8 @@
|
|||
ÉÚ <package role="port">misc/shared-mime-info</package>. üÔÏ
|
||||
ÔÁËÖÅ ÄÏÂÁ×ÌÑÅÔ ÓÏÂÓÔ×ÅÎÎÙÊ ÜÔÁÐ post-install É ÓÔÒÏËÉ × plist
|
||||
ÄÌÑ ÚÁÐÕÓËÁ <application>update-mime-data</application> Ó
|
||||
подходящими аргументами во время установки и удаления пакета.
|
||||
</entry>
|
||||
подходящими аргументами во время установки и удаления
|
||||
пакета.</entry>
|
||||
</row>
|
||||
|
||||
<row xml:id="uses-shebangfix">
|
||||
|
@ -578,16 +581,19 @@
|
|||
|
||||
<entry>÷Ï ÍÎÏÇÏÍ ÐÒÏÇÒÁÍÍÎÏÍ ÏÂÅÓÐÅÞÅÎÉÉ ÕËÁÚÙ×ÁÅÔÓÑ ÎÅÐÒÁ×ÉÌØÎÙÊ
|
||||
ÐÕÔØ Ë ÉÎÔÅÒÐÒÅÔÁÔÏÒÕ (shebang), × ÐÅÒ×ÕÀ ÏÞÅÒÅÄØ ÜÔÏ ËÁÓÁÅÔÓÑ
|
||||
<filename>/usr/bin/perl</filename> и <filename>/bin/bash</filename>.
|
||||
Это значение исправляет строку shebang в сценариях, перечисленных
|
||||
в <varname>SHEBANG_FILES</varname>. По умолчанию сейчас
|
||||
<filename>/usr/bin/perl</filename> и
|
||||
<filename>/bin/bash</filename>. Это значение исправляет строку
|
||||
shebang в сценариях, перечисленных в
|
||||
<varname>SHEBANG_FILES</varname>. По умолчанию сейчас
|
||||
ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ <application>Perl</application>,
|
||||
<application>Python</application>, <application>Bash</application>,
|
||||
<application>Ruby</application> и <application>PHP</application>.
|
||||
Для поддержки других интерпретаторов необходимо соответствующее
|
||||
значение <varname>SHEBANG_LANG</varname> (например,
|
||||
<application>Python</application>,
|
||||
<application>Bash</application>, <application>Ruby</application>
|
||||
и <application>PHP</application>. Для поддержки других
|
||||
интерпретаторов необходимо соответствующее значение
|
||||
<varname>SHEBANG_LANG</varname> (например,
|
||||
<literal>SHEBANG_LANG=lua</literal>),
|
||||
<varname>lua_OLD_CMD</varname> и <varname>lua_CMD</varname>.</entry>
|
||||
<varname>lua_OLD_CMD</varname> и
|
||||
<varname>lua_CMD</varname>.</entry>
|
||||
</row>
|
||||
|
||||
<row xml:id="uses-tcl">
|
||||
|
@ -606,10 +612,10 @@
|
|||
<literal>86</literal>) ÉÌÉ ÖÅ ÍÉÎÉÍÁÌØÎÙÊ ÎÏÍÅÒ ×ÅÒÓÉÉ (ÎÁ ÄÁÎÎÙÊ
|
||||
ÍÏÍÅÎÔ <literal>84+</literal>, <literal>85+</literal> ÉÌÉ
|
||||
<literal>86+</literal>). íÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎÁ ÚÁ×ÉÓÉÍÏÓÔØ ÄÌÑ
|
||||
сборки или выполнения с использованием <literal>PORT,build</literal>
|
||||
или <literal>PORT,run</literal>. После подключения
|
||||
<filename>bsd.port.pre.mk</filename> порт может проверить
|
||||
результат, используя эти переменные:
|
||||
сборки или выполнения с использованием
|
||||
<literal>PORT,build</literal> или <literal>PORT,run</literal>.
|
||||
После подключения <filename>bsd.port.pre.mk</filename> порт может
|
||||
проверить результат, используя эти переменные:
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
|
@ -670,22 +676,22 @@
|
|||
|
||||
<entry>(ÎÅÔ), <literal>ARGS</literal></entry>
|
||||
|
||||
<entry>Добавляет зависимость от <application>twistedCore</application>.
|
||||
Перечень требуемых компонентов можно указать в качестве значения
|
||||
этой переменной. <literal>ARGS</literal> может принимать одно из
|
||||
значений:
|
||||
<entry>Добавляет зависимость от
|
||||
<application>twistedCore</application>. Перечень требуемых
|
||||
компонентов можно указать в качестве значения этой переменной.
|
||||
<literal>ARGS</literal> может принимать одно из значений:
|
||||
|
||||
<itemizedlist>
|
||||
<listitem>
|
||||
<para><literal>build</literal>: ÄÏÂÁ×ÌÑÅÔ
|
||||
<application>twistedCore</application> или любой из указанных
|
||||
компонентов как зависимость построения.</para>
|
||||
<application>twistedCore</application> или любой из
|
||||
указанных компонентов как зависимость построения.</para>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para><literal>run</literal>: ÄÏÂÁ×ÌÑÅÔ
|
||||
<application>twistedCore</application> или любой из указанных
|
||||
компонентов как зависимость запуска.</para>
|
||||
<application>twistedCore</application> или любой из
|
||||
указанных компонентов как зависимость запуска.</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
|
@ -772,7 +778,7 @@
|
|||
|
||||
<listitem>
|
||||
<para>(ÏÔÄÅÌØÎÙÅ ÚÁÐÉÓÉ): ÐÏÄÄÅÒÖËÁ ÔÏÌØËÏ ÕËÁÚÁÎÎÙÈ
|
||||
браузеров</para>
|
||||
браузеров</para>
|
||||
</listitem>
|
||||
</itemizedlist>
|
||||
|
||||
|
|
|
@ -861,8 +861,8 @@
|
|||
<entry>500018</entry>
|
||||
<entry>24 ÆÅ×ÒÁÌÑ 2001</entry>
|
||||
<entry>5.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÐÅÒÅÍÅÎÎÏÊ make CPUTYPE,
|
||||
ÐÏÚ×ÏÌÑÀÝÅÊ ËÏÎÔÒÏÌÉÒÏ×ÁÔØ ÓÐÅÃÉÆÉÞÎÙÅ ÄÌÑ CPU ÏÐÔÉÍÉÚÁÃÉÉ.
|
||||
</entry>
|
||||
ÐÏÚ×ÏÌÑÀÝÅÊ ËÏÎÔÒÏÌÉÒÏ×ÁÔØ ÓÐÅÃÉÆÉÞÎÙÅ ÄÌÑ CPU
|
||||
ÏÐÔÉÍÉÚÁÃÉÉ.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -1363,8 +1363,7 @@
|
|||
<row>
|
||||
<entry>502114</entry>
|
||||
<entry>13 ÉÀÎÑ 2004</entry>
|
||||
<entry>5.2-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ ALTQ ÉÎÆÒÁÓÔÒÕËÔÕÒÙ.
|
||||
</entry>
|
||||
<entry>5.2-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ ALTQ ÉÎÆÒÁÓÔÒÕËÔÕÒÙ.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -1458,16 +1457,16 @@
|
|||
<entry>502127</entry>
|
||||
<entry>2 Á×ÇÕÓÔÁ 2004</entry>
|
||||
<entry>5.2-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × API ÑÄÒÁ UMA, ÒÁÚÒÅÛÁÀÝÅÇÏ
|
||||
ËÏÎÓÔÒÕËÔÏÒÁÍ/ÉÎÉÃÉÁÌÉÚÁÔÏÒÁÍ (ctors/inits) ×ÏÚ×ÒÁÝÁÔØ ÎÅÕÄÁÞÕ.
|
||||
</entry>
|
||||
ËÏÎÓÔÒÕËÔÏÒÁÍ/ÉÎÉÃÉÁÌÉÚÁÔÏÒÁÍ (ctors/inits) ×ÏÚ×ÒÁÝÁÔØ
|
||||
ÎÅÕÄÁÞÕ.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>502128</entry>
|
||||
<entry>8 Á×ÇÕÓÔÁ 2004</entry>
|
||||
<entry>5.2-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × ÓÉÇÎÁÔÕÒÅ vfs_mount, Á ÔÁËÖÅ
|
||||
ÐÏÓÌÅ ÏÂÝÅÊ ÚÁÍÅÎÙ PRISON_ROOT ÎÁ SUSER_ALLOWJAIL × API suser(9).
|
||||
</entry>
|
||||
ÐÏÓÌÅ ÏÂÝÅÊ ÚÁÍÅÎÙ PRISON_ROOT ÎÁ SUSER_ALLOWJAIL × API
|
||||
suser(9).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -1498,8 +1497,8 @@
|
|||
<row>
|
||||
<entry>503102</entry>
|
||||
<entry>13 ÆÅ×ÒÁÌÑ 2005</entry>
|
||||
<entry>5.3-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÉÍÐÏÒÔÁ nc(1) ÉÚ OpenBSD.
|
||||
</entry>
|
||||
<entry>5.3-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÉÍÐÏÒÔÁ nc(1) ÉÚ
|
||||
OpenBSD.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -1592,8 +1591,8 @@
|
|||
<row>
|
||||
<entry>600001</entry>
|
||||
<entry>27 Á×ÇÕÓÔÁ 2004</entry>
|
||||
<entry>6.0-CURRENT ÐÏÓÌÅ ÐÏÓÔÏÑÎÎÏÇÏ ×ËÌÀÞÅÎÉÑ × ÑÄÒÏ PFIL_HOOKS.
|
||||
</entry>
|
||||
<entry>6.0-CURRENT ÐÏÓÌÅ ÐÏÓÔÏÑÎÎÏÇÏ ×ËÌÀÞÅÎÉÑ × ÑÄÒÏ
|
||||
PFIL_HOOKS.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -1679,8 +1678,8 @@
|
|||
<entry>6.0-CURRENT ÐÏÓÌÅ ÉÓÐÒÁ×ÌÅÎÉÊ ×
|
||||
<filename><src/include/stdbool.h></filename> É
|
||||
<filename><src/sys/i386/include/_types.h></filename>
|
||||
ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ GCC × ËÏÍÐÉÌÑÔÏÒÅ Intel C/C++.
|
||||
</entry>
|
||||
ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ GCC × ËÏÍÐÉÌÑÔÏÒÅ Intel
|
||||
C/C++.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -1941,8 +1940,8 @@
|
|||
<entry>602104</entry>
|
||||
<entry>28 ÑÎ×ÁÒÑ 2007</entry>
|
||||
<entry>6.2-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÕÚÌÏ× netgraph ng_deflate(4)
|
||||
É ng_pred1(4) É ÎÏ×ÏÇÏ ÕÚÌÁ ng_ppp(4) ÓÏ ÓÖÁÔÉÅÍ É ÛÉÆÒÏ×ÁÎÉÅÍ.
|
||||
</entry>
|
||||
É ng_pred1(4) É ÎÏ×ÏÇÏ ÕÚÌÁ ng_ppp(4) ÓÏ ÓÖÁÔÉÅÍ É
|
||||
ÛÉÆÒÏ×ÁÎÉÅÍ.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2047,8 +2046,8 @@
|
|||
<row>
|
||||
<entry>603102</entry>
|
||||
<entry>24 ÁÐÒÅÌÑ 2008</entry>
|
||||
<entry>6.3-STABLE ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ l_sysid Ë ÓÔÒÕËÔÕÒÅ flock.
|
||||
</entry>
|
||||
<entry>6.3-STABLE ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ l_sysid Ë ÓÔÒÕËÔÕÒÅ
|
||||
flock.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2193,8 +2192,8 @@
|
|||
<row>
|
||||
<entry>700016</entry>
|
||||
<entry>22 ÁÐÒÅÌÑ 2006</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ &man.fcloseall.3; × libc.
|
||||
</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ &man.fcloseall.3; ×
|
||||
libc.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2224,8 +2223,8 @@
|
|||
<row>
|
||||
<entry>700021</entry>
|
||||
<entry>4 ÓÅÎÔÑÂÒÑ 2006</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ libpcap 0.9.4 É tcpdump 3.9.4.
|
||||
</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ libpcap 0.9.4 É tcpdump
|
||||
3.9.4.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2290,15 +2289,14 @@
|
|||
<row>
|
||||
<entry>700031</entry>
|
||||
<entry>23 ÆÅ×ÒÁÌÑ 2007</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × bus_setup_intr() (newbus).
|
||||
</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × bus_setup_intr()
|
||||
(newbus).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>700032</entry>
|
||||
<entry>2 ÍÁÒÔÁ 2007</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ×ÎÅÓÅÎÉÑ ÍÉËÒÏËÏÄÁ ipw(4) É iwi(4).
|
||||
</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ×ÎÅÓÅÎÉÑ ÍÉËÒÏËÏÄÁ ipw(4) É iwi(4).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2319,8 +2317,7 @@
|
|||
<entry>700035</entry>
|
||||
<entry>26 ÍÁÒÔÁ 2007</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÍÅÈÁÎÉÚÍÁ Õ×ÅÄÏÍÌÅÎÉÊ
|
||||
ÐÒÉ ÉÚÍÅÎÅÎÉÉ ÞÁÓÔÏÔÙ CPU.
|
||||
</entry>
|
||||
ÐÒÉ ÉÚÍÅÎÅÎÉÉ ÞÁÓÔÏÔÙ CPU.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2341,8 +2338,8 @@
|
|||
<entry>700038</entry>
|
||||
<entry>30 ÁÐÒÅÌÑ 2007</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ &man.getenv.3;, &man.putenv.3;,
|
||||
&man.setenv.3; É &man.unsetenv.3; ÄÌÑ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ Ó POSIX.
|
||||
</entry>
|
||||
&man.setenv.3; É &man.unsetenv.3; ÄÌÑ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ Ó
|
||||
POSIX.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2354,8 +2351,8 @@
|
|||
<row>
|
||||
<entry>700040</entry>
|
||||
<entry>10 ÍÁÑ 2007</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ &man.flopen.3; × libutil.
|
||||
</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ &man.flopen.3; ×
|
||||
libutil.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2457,8 +2454,8 @@
|
|||
<row>
|
||||
<entry>700053</entry>
|
||||
<entry>30 ÓÅÎÔÑÂÒÑ 2007</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÐÏÄÄÅÒÖËÉ ÄÌÑ ÄÏÍÅÎÏ× PCI.
|
||||
</entry>
|
||||
<entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÐÏÄÄÅÒÖËÉ ÄÌÑ ÄÏÍÅÎÏ×
|
||||
PCI.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2498,8 +2495,8 @@
|
|||
<row>
|
||||
<entry>700103</entry>
|
||||
<entry>10 ÁÐÒÅÌÑ 2008</entry>
|
||||
<entry>7.0-STABLE ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ l_sysid × ÓÔÒÕËÔÕÒÕ flock.
|
||||
</entry>
|
||||
<entry>7.0-STABLE ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ l_sysid × ÓÔÒÕËÔÕÒÕ
|
||||
flock.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2559,8 +2556,8 @@
|
|||
<row>
|
||||
<entry>700112</entry>
|
||||
<entry>27 Á×ÇÕÓÔÁ 2008</entry>
|
||||
<entry>7.0-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÐÏÄÄÅÒÖËÉ DTrace × ÑÄÒÅ.
|
||||
</entry>
|
||||
<entry>7.0-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÐÏÄÄÅÒÖËÉ DTrace ×
|
||||
ÑÄÒÅ.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2578,8 +2575,8 @@
|
|||
<row>
|
||||
<entry>701101</entry>
|
||||
<entry>10 ÑÎ×ÁÒÑ 2009</entry>
|
||||
<entry>7.1-STABLE ÐÏÓÌÅ ÂÅËÐÏÒÔÁ <function>strndup</function>.
|
||||
</entry>
|
||||
<entry>7.1-STABLE ÐÏÓÌÅ ÂÅËÐÏÒÔÁ
|
||||
<function>strndup</function>.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2662,8 +2659,8 @@
|
|||
<row>
|
||||
<entry>702105</entry>
|
||||
<entry>31 ÉÀÌÑ 2009</entry>
|
||||
<entry>7.2-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÉÚÍÅÎÅÎÉÑ ABI ÄÌÑ SYSVIPC.
|
||||
</entry>
|
||||
<entry>7.2-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÉÚÍÅÎÅÎÉÑ ABI ÄÌÑ
|
||||
SYSVIPC.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2701,15 +2698,15 @@
|
|||
<row>
|
||||
<entry>800000</entry>
|
||||
<entry>11 ÏËÔÑÂÒÑ 2007</entry>
|
||||
<entry>8.0-CURRENT. òÁÚÄÅÌÅÎÉÅ Ä×ÕÈÂÁÊÔÏ×ÙÈ É ÏÄÎÏÂÁÊÔÏ×ÙÈ ctype.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT. òÁÚÄÅÌÅÎÉÅ Ä×ÕÈÂÁÊÔÏ×ÙÈ É ÏÄÎÏÂÁÊÔÏ×ÙÈ
|
||||
ctype.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>800001</entry>
|
||||
<entry>16 ÏËÔÑÂÒÑ 2007</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ libpcap 0.9.8 É tcpdump 3.9.8.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ libpcap 0.9.8 É tcpdump
|
||||
3.9.8.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2724,8 +2721,8 @@
|
|||
<entry>24 ÏËÔÑÂÒÑ 2007</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÏÂÒÁÔÎÏÊ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ ABI ÄÌÑ
|
||||
IOCTL'ÅÊ PCIOCGETCONF, PCIOCREAD É PCIOCWRITE Ó ×ÅÒÓÉÑÍÉ FreeBSD
|
||||
4/5/6, ÞÔÏ ×ÙÚ×ÁÌÏ ÐÏ×ÔÏÒÎÕÀ ÐÏÌÏÍËÕ ABI ÄÌÑ PCIOCGETCONF IOCTL
|
||||
</entry>
|
||||
4/5/6, ÞÔÏ ×ÙÚ×ÁÌÏ ÐÏ×ÔÏÒÎÕÀ ÐÏÌÏÍËÕ ABI ÄÌÑ PCIOCGETCONF
|
||||
IOCTL</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2771,8 +2768,8 @@
|
|||
<row>
|
||||
<entry>800010</entry>
|
||||
<entry>10 ÑÎ×ÁÒÑ 2008</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÐÒÏÔÏÔÉÐÁ &man.vn.lock.9;.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÐÒÏÔÏÔÉÐÁ
|
||||
&man.vn.lock.9;.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2793,8 +2790,8 @@
|
|||
<row>
|
||||
<entry>800013</entry>
|
||||
<entry>23 ÑÎ×ÁÒÑ 2008</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ËÏÄÉÒÏ×ËÉ <quote>ASCII</quote>.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ËÏÄÉÒÏ×ËÉ
|
||||
<quote>ASCII</quote>.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2808,8 +2805,8 @@
|
|||
<row>
|
||||
<entry>800015</entry>
|
||||
<entry>26 ÑÎ×ÁÒÑ 2008</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÒÁÓÛÉÒÅÎÉÑ ÔÉÐÏ× ÄÌÑ ÓÔÒÕËÔÕÒ &man.fts.3;.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÒÁÓÛÉÒÅÎÉÑ ÔÉÐÏ× ÄÌÑ ÓÔÒÕËÔÕÒ
|
||||
&man.fts.3;.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2889,8 +2886,8 @@
|
|||
<entry>800026</entry>
|
||||
<entry>12 ÍÁÒÔÁ 2008</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÐÁÒÁÍÅÔÒÁ ÐÒÉÏÒÉÔÅÔÁ ÄÌÑ
|
||||
cv_broadcastpri ÔÁË, ÞÔÏ 0 ÏÚÎÁÞÁÅÔ ÏÔÓÕÔÓÔ×ÉÅ ÐÒÉÏÒÉÔÅÔÁ.
|
||||
</entry>
|
||||
cv_broadcastpri ÔÁË, ÞÔÏ 0 ÏÚÎÁÞÁÅÔ ÏÔÓÕÔÓÔ×ÉÅ
|
||||
ÐÒÉÏÒÉÔÅÔÁ.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -2903,8 +2900,8 @@
|
|||
<row>
|
||||
<entry>800028</entry>
|
||||
<entry>26 ÍÁÒÔÁ 2008</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ l_sysid × ÓÔÒÕËÔÕÒÕ flock.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ l_sysid × ÓÔÒÕËÔÕÒÕ
|
||||
flock.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3012,8 +3009,8 @@
|
|||
<entry>800043</entry>
|
||||
<entry>13 Á×ÇÕÓÔÁ 2008</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × bpf(4) ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ
|
||||
ÅÄÉÎÓÔ×ÅÎÎÏÇÏ ÕÚÌÁ ÕÓÔÒÏÊÓÔ×Á ×ÍÅÓÔÏ ËÌÏÎÉÒÏ×ÁÎÉÑ ÕÓÔÒÏÊÓÔ×.
|
||||
</entry>
|
||||
ÅÄÉÎÓÔ×ÅÎÎÏÇÏ ÕÚÌÁ ÕÓÔÒÏÊÓÔ×Á ×ÍÅÓÔÏ ËÌÏÎÉÒÏ×ÁÎÉÑ
|
||||
ÕÓÔÒÏÊÓÔ×.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3128,8 +3125,8 @@
|
|||
<row>
|
||||
<entry>800059</entry>
|
||||
<entry>15 ÄÅËÁÂÒÑ 2008</entry>
|
||||
<entry>8.0-CURRENT ×ËÌÀÞÁÅÔ × ÓÅÂÑ ÎÏ×ÙÊ ÐÅÒÅÐÉÓÁÎÎÙÊ arp-v2.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ×ËÌÀÞÁÅÔ × ÓÅÂÑ ÎÏ×ÙÊ ÐÅÒÅÐÉÓÁÎÎÙÊ
|
||||
arp-v2.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3155,8 +3152,8 @@
|
|||
<entry>800063</entry>
|
||||
<entry>18 ÆÅ×ÒÁÌÑ 2009</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ËÏÎÆÉÇÁ GENERIC ÄÌÑ
|
||||
ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÓÔÅËÁ USB2, Á ÔÁËÖÅ ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ fdevname(3).
|
||||
</entry>
|
||||
ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÓÔÅËÁ USB2, Á ÔÁËÖÅ ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ
|
||||
fdevname(3).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3169,8 +3166,8 @@
|
|||
<row>
|
||||
<entry>800065</entry>
|
||||
<entry>26 ÆÅ×ÒÁÌÑ 2009</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ ×ÓÅÈ ÆÕÎËÃÉÊ × libmp(3).
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ ×ÓÅÈ ÆÕÎËÃÉÊ ×
|
||||
libmp(3).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3184,15 +3181,15 @@
|
|||
<entry>800067</entry>
|
||||
<entry>28 ÆÅ×ÒÁÌÑ 2009</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ getdelim(), getline(),
|
||||
stpncpy(), strnlen(), wcsnlen(), wcscasecmp() É wcsncasecmp().
|
||||
</entry>
|
||||
stpncpy(), strnlen(), wcsnlen(), wcscasecmp() É
|
||||
wcsncasecmp().</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>800068</entry>
|
||||
<entry>2 ÍÁÒÔÁ 2009</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ devclass ushub × uhub.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ devclass ushub ×
|
||||
uhub.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3233,8 +3230,8 @@
|
|||
<row>
|
||||
<entry>800074</entry>
|
||||
<entry>24 ÍÁÒÔÁ 2009</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ tcpdump 4.0.0 É libpcap 1.0.0.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ tcpdump 4.0.0 É libpcap
|
||||
1.0.0.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3247,8 +3244,8 @@
|
|||
<row>
|
||||
<entry>800076</entry>
|
||||
<entry>9 ÁÐÒÅÌÑ 2009</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÐÒÏÆÉÌÅÊ ÚÁÄÅÒÖËÉ × dummynet.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÐÒÏÆÉÌÅÊ ÚÁÄÅÒÖËÉ ×
|
||||
dummynet.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3277,15 +3274,15 @@
|
|||
<row>
|
||||
<entry>800080</entry>
|
||||
<entry>15 ÁÐÒÅÌÑ 2009</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÒÁÓËÌÁÄËÉ ÓÔÒÕËÔÕÒÙ inpcb.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÒÁÓËÌÁÄËÉ ÓÔÒÕËÔÕÒÙ
|
||||
inpcb.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>800081</entry>
|
||||
<entry>19 ÁÐÒÅÌÑ 2009</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÒÁÓËÌÁÄËÉ ÓÔÒÕËÔÕÒÙ malloc_type.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÒÁÓËÌÁÄËÉ ÓÔÒÕËÔÕÒÙ
|
||||
malloc_type.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3335,8 +3332,8 @@
|
|||
<row>
|
||||
<entry>800088</entry>
|
||||
<entry>20 ÍÁÑ 2009</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÊ × ÒÅÖÉÍÅ net80211 monitor.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÊ × ÒÅÖÉÍÅ net80211
|
||||
monitor.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3349,8 +3346,8 @@
|
|||
<row>
|
||||
<entry>800090</entry>
|
||||
<entry>23 ÍÁÑ 2009</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ËÌÏÎÉÒÏ×ÁÎÉÑ ×ÉÒÔÕÁÌÉÚÏ×ÁÎÎÙÈ ÉÎÔÅÒÆÅÊÓÏ×.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ËÌÏÎÉÒÏ×ÁÎÉÑ ×ÉÒÔÕÁÌÉÚÏ×ÁÎÎÙÈ
|
||||
ÉÎÔÅÒÆÅÊÓÏ×.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3372,8 +3369,8 @@
|
|||
<row>
|
||||
<entry>800093</entry>
|
||||
<entry>29 ÍÁÑ 2009</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ mnt_xflag × ÓÔÒÕËÔÕÒÕ mount.
|
||||
</entry>
|
||||
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ mnt_xflag × ÓÔÒÕËÔÕÒÕ
|
||||
mount.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3485,8 +3482,8 @@
|
|||
<row>
|
||||
<entry>800108</entry>
|
||||
<entry>21 ÎÏÑÂÒÑ 2009</entry>
|
||||
<entry>8.0-STABLE ÐÏÓÌÅ ÒÅÁÌÉÚÁÃÉÉ kevent-ÆÉÌØÔÒÁ EVFILT_USER.
|
||||
</entry>
|
||||
<entry>8.0-STABLE ÐÏÓÌÅ ÒÅÁÌÉÚÁÃÉÉ kevent-ÆÉÌØÔÒÁ
|
||||
EVFILT_USER.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3570,15 +3567,15 @@
|
|||
<entry>802501</entry>
|
||||
<entry>28 ÆÅ×ÒÁÌÑ 2011</entry>
|
||||
<entry>8.2-STABLE ÐÏÓÌÅ ÏÂÒÁÔÎÏÇÏ ÐÏÒÔÉÒÏ×ÁÎÉÑ ÉÚÍÅÎÅÎÉÊ DTrace,
|
||||
×ËÌÀÞÁÀÝÉÈ ÐÏÄÄÅÒÖËÕ ÔÒÁÓÓÉÒÏ×ËÉ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ ÐÒÏÇÒÁÍÍ.
|
||||
</entry>
|
||||
×ËÌÀÞÁÀÝÉÈ ÐÏÄÄÅÒÖËÕ ÔÒÁÓÓÉÒÏ×ËÉ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ
|
||||
ÐÒÏÇÒÁÍÍ.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>802502</entry>
|
||||
<entry>6 ÍÁÒÔÁ 2011</entry>
|
||||
<entry>8.2-STABLE ÐÏÓÌÅ ÏÂÒÁÔÎÏÇÏ ÐÏÒÔÉÒÏ×ÁÎÉÑ log2 É log2f × libm.
|
||||
</entry>
|
||||
<entry>8.2-STABLE ÐÏÓÌÅ ÏÂÒÁÔÎÏÇÏ ÐÏÒÔÉÒÏ×ÁÎÉÑ log2 É log2f ×
|
||||
libm.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3693,8 +3690,8 @@
|
|||
<row>
|
||||
<entry>803500</entry>
|
||||
<entry>3 ÍÁÒÔÁ 2012</entry>
|
||||
<entry>8.3-STABLE ÐÏÓÌÅ ÏÔÄÅÌÅÎÉÑ ×ÅÔËÉ releng/8.3 (RELENG_8_3).
|
||||
</entry>
|
||||
<entry>8.3-STABLE ÐÏÓÌÅ ÏÔÄÅÌÅÎÉÑ ×ÅÔËÉ releng/8.3
|
||||
(RELENG_8_3).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3765,8 +3762,8 @@
|
|||
<entry>13 ÑÎ×ÁÒÑ 2010</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÕÄÁÌÅÎÉÑ utmp(5) É ÄÏÂÁ×ÌÅÎÉÑ utmpx
|
||||
(ÓÍÏÔÒÉÔÅ <function>getutxent(3)</function>) ÄÌÑ ÕÌÕÞÛÅÎÎÏÇÏ
|
||||
ÐÒÏÔÏËÏÌÉÒÏ×ÁÎÉÑ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ ×ÈÏÄÏ× É ÓÉÓÔÅÍÎÙÈ ÓÏÂÙÔÉÊ.
|
||||
</entry>
|
||||
ÐÒÏÔÏËÏÌÉÒÏ×ÁÎÉÑ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ ×ÈÏÄÏ× É ÓÉÓÔÅÍÎÙÈ
|
||||
ÓÏÂÙÔÉÊ.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3800,15 +3797,15 @@
|
|||
<row>
|
||||
<entry>900012</entry>
|
||||
<entry>10 ÍÁÑ 2010</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ liblzma, xz, xzdec É lzmainfo.
|
||||
</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ liblzma, xz, xzdec É
|
||||
lzmainfo.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>900013</entry>
|
||||
<entry>14 ÍÁÑ 2010</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÐÒÉ×ÌÅÞÅÎÉÑ ÉÓÐÒÁ×ÌÅÎÉÊ USB × linux(4).
|
||||
</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÐÒÉ×ÌÅÞÅÎÉÑ ÉÓÐÒÁ×ÌÅÎÉÊ USB ×
|
||||
linux(4).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3876,22 +3873,22 @@
|
|||
<row>
|
||||
<entry>900023</entry>
|
||||
<entry>11 ÏËÔÑÂÒÑ 2010</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ xz ÄÏ ÓÎÁÐÛÏÔÁ git 20101010.
|
||||
</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ xz ÄÏ ÓÎÁÐÛÏÔÁ git
|
||||
20101010.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>900024</entry>
|
||||
<entry>11 ÎÏÑÂÒÑ 2010</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÚÁÍÅÎÙ libgcc.a ÎÁ libcompiler_rt.a.
|
||||
</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÚÁÍÅÎÙ libgcc.a ÎÁ
|
||||
libcompiler_rt.a.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>900025</entry>
|
||||
<entry>12 ÎÏÑÂÒÑ 2010</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÍÏÄÕÌØÎÏÇÏ ËÏÎÔÒÏÌÑ ÐÅÒÅÇÒÕÚËÉ.
|
||||
</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÍÏÄÕÌØÎÏÇÏ ËÏÎÔÒÏÌÑ
|
||||
ÐÅÒÅÇÒÕÚËÉ.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3920,15 +3917,14 @@
|
|||
<entry>28 ÄÅËÁÂÒÑ 2010</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÓÔÅËÁ TCP ÄÌÑ ×ÚÁÉÍÏÄÅÊÓÔ×ÉÑ Ó
|
||||
ÍÏÄÕÌÑÍÉ Khelp ÞÅÒÅÚ ×ÓÐÏÍÏÇÁÔÅÌØÎÙÅ ÔÏÞËÉ Ó×ÑÚÉ É ÈÒÁÎÅÎÉÑ
|
||||
ÄÁÎÎÙÈ ÕÒÏ×ÎÑ ÓÅÔÅ×ÏÇÏ ÓÏÅÄÉÎÅÎÉÑ × ÕÐÒÁ×ÌÑÀÝÅÍ ÂÌÏËÅ TCP.
|
||||
</entry>
|
||||
ÄÁÎÎÙÈ ÕÒÏ×ÎÑ ÓÅÔÅ×ÏÇÏ ÓÏÅÄÉÎÅÎÉÑ × ÕÐÒÁ×ÌÑÀÝÅÍ ÂÌÏËÅ TCP.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>900030</entry>
|
||||
<entry>12 ÑÎ×ÁÒÑ 2011</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ libdialog ÄÏ ×ÅÒÓÉÉ 20100428.
|
||||
</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ libdialog ÄÏ ×ÅÒÓÉÉ
|
||||
20100428.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -3941,22 +3937,22 @@
|
|||
<row>
|
||||
<entry>900032</entry>
|
||||
<entry>8 ÆÅ×ÒÁÌÑ 2011</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÕÄÁÌÅÎÉÑ ÓÉÍ×ÏÌÁ É ÐÒÏÔÏÔÉÐÁ uio_yield.
|
||||
</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÕÄÁÌÅÎÉÑ ÓÉÍ×ÏÌÁ É ÐÒÏÔÏÔÉÐÁ
|
||||
uio_yield.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>900033</entry>
|
||||
<entry>18 ÆÅ×ÒÁÌÑ 2011</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ binutils ÄÏ ×ÅÒÓÉÉ 2.17.50.
|
||||
</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ binutils ÄÏ ×ÅÒÓÉÉ
|
||||
2.17.50.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>900034</entry>
|
||||
<entry>8 ÍÁÒÔÁ 2011</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÊ × struct sysvec (sv_schedtail).
|
||||
</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÊ × struct sysvec
|
||||
(sv_schedtail).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4041,8 +4037,8 @@
|
|||
<row>
|
||||
<entry>900045</entry>
|
||||
<entry>2 ÑÎ×ÁÒÑ 2012</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC true/false ÉÚ 1000002.
|
||||
</entry>
|
||||
<entry>9.0-CURRENT ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC true/false ÉÚ
|
||||
1000002.</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4104,8 +4100,8 @@
|
|||
<row>
|
||||
<entry>901500</entry>
|
||||
<entry>6 Á×ÇÕÓÔÁ 2012</entry>
|
||||
<entry>9.1-STABLE ÐÏÓÌÅ ÏÔÄÅÌÅÎÉÑ ×ÅÔËÉ releng/9.1 (RELENG_9_1).
|
||||
</entry>
|
||||
<entry>9.1-STABLE ÐÏÓÌÅ ÏÔÄÅÌÅÎÉÑ ×ÅÔËÉ releng/9.1
|
||||
(RELENG_9_1).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4150,16 +4146,16 @@
|
|||
<entry>902001</entry>
|
||||
<entry>3 Á×ÇÕÓÔÁ 2013</entry>
|
||||
<entry>ïÔÄÅÌÅÎÉÅ ×ÅÔËÉ <literal>releng/9.2</literal> ÏÔ
|
||||
<literal>stable/9</literal> (ÒÅ×. <revnumber>253912</revnumber>).
|
||||
</entry>
|
||||
<literal>stable/9</literal> (ÒÅ×.
|
||||
<revnumber>253912</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>902501</entry>
|
||||
<entry>August 2, 2013</entry>
|
||||
<entry>9.2-STABLE ÐÏÓÌÅ ÓÏÚÄÁÎÉÑ ×ÅÔËÉ
|
||||
<literal>releng/9.2</literal> (ÒÅ×. <revnumber>253913</revnumber>).
|
||||
</entry>
|
||||
<literal>releng/9.2</literal> (ÒÅ×.
|
||||
<revnumber>253913</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4250,8 +4246,8 @@
|
|||
<entry>1000006</entry>
|
||||
<entry>26 ÑÎ×ÁÒÑ 2012</entry>
|
||||
<entry>10-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÁÓÉÎÈÒÏÎÎÙÈ Õ×ÅÄÏÍÌÅÎÉÊ Ï ÎÁÌÉÞÉÉ
|
||||
×ÈÏÄÎÙÈ ÄÁÎÎÙÈ × ÕÒÏ×ÎÅ cam(4) (ÒÅ×. <revnumber>230590</revnumber>).
|
||||
</entry>
|
||||
×ÈÏÄÎÙÈ ÄÁÎÎÙÈ × ÕÒÏ×ÎÅ cam(4) (ÒÅ×.
|
||||
<revnumber>230590</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4368,8 +4364,8 @@
|
|||
<entry>22 ÏËÔÑÂÒÑ 2012</entry>
|
||||
<entry>10-CURRENT ÐÏÓÌÅ ÕÄÁÌÅÎÉÑ ÐÏÄÄÅÒÖËÉ ÆÁÊÌÏ×ÙÈ ÓÉÓÔÅÍ, ÎÅ
|
||||
Ñ×ÌÑÀÝÉÈÓÑ MPSAFE, É ÄÏÂÁ×ÌÅÎÉÑ ÐÏÄÄÅÒÖËÉ FUSEFS (ÒÅ×.
|
||||
<revnumber>241519</revnumber>, <revnumber>241897</revnumber>).
|
||||
</entry>
|
||||
<revnumber>241519</revnumber>,
|
||||
<revnumber>241897</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4395,8 +4391,7 @@
|
|||
<entry>5 ÎÏÑÂÒÑ 2012</entry>
|
||||
<entry>10-CURRENT ÐÏÓÌÅ ÐÅÒÅËÌÀÞÅÎÉÑ ËÏÍÐÉÌÑÔÏÒÁ ÐÏ ÕÍÏÌÞÁÎÉÀ ÎÁ
|
||||
clang ÎÁ ÐÌÁÔÆÏÒÍÁÈ i386 É amd64 (ÒÅ×.
|
||||
<revnumber>242624</revnumber>).
|
||||
</entry>
|
||||
<revnumber>242624</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4407,8 +4402,8 @@
|
|||
ÏÔÐÒÁ×ËÏÊ ÓÔÒÕËÔÕÒÙ × ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÊ ÒÅÖÉÍ ÐÏÓÒÅÄÓÔ×ÏÍ sysctl
|
||||
ÉÌÉ ÓÏËÅÔÁ ÍÁÒÛÒÕÔÉÚÁÃÉÉ. üÔÏ ÏÚÎÁÞÁÅÔ, ÞÔÏ ÓÐÅÃÉÆÉÞÎÙÊ ÄÌÑ KAME
|
||||
embedded scope id × sin6_addr.s6_addr[2] × ÐÏÌØÚÏ×ÁÔÅÌØÓËÏÍ
|
||||
ÐÒÉÌÏÖÅÎÉÉ ×ÓÅÇÄÁ ÏÞÉÝÁÅÔÓÑ (ÒÅ×. <revnumber>243443</revnumber>).
|
||||
</entry>
|
||||
ÐÒÉÌÏÖÅÎÉÉ ×ÓÅÇÄÁ ÏÞÉÝÁÅÔÓÑ (ÒÅ×.
|
||||
<revnumber>243443</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4462,9 +4457,9 @@
|
|||
<entry>1000032</entry>
|
||||
<entry>1 ÍÁÑ 2013</entry>
|
||||
<entry>10-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÓÉÓÔÅÍÎÙÈ ×ÙÚÏ×Ï×
|
||||
<function>accept4</function> (ÒÅ×. <revnumber>250154</revnumber>) É
|
||||
<function>pipe2</function> (ÒÅ×. <revnumber>250159</revnumber>).
|
||||
</entry>
|
||||
<function>accept4</function> (ÒÅ×. <revnumber>250154</revnumber>)
|
||||
É <function>pipe2</function> (ÒÅ×.
|
||||
<revnumber>250159</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4486,24 +4481,24 @@
|
|||
<function>catanh</function>, <function>catanhf</function>,
|
||||
<function>logl</function>, <function>log2l</function>,
|
||||
<function>log10l</function>, <function>log1pl</function>,
|
||||
<function>expm1l</function> (ÒÅ×. <revnumber>251294</revnumber>).
|
||||
</entry>
|
||||
<function>expm1l</function> (ÒÅ×.
|
||||
<revnumber>251294</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>1000035</entry>
|
||||
<entry>8 ÉÀÎÑ 2013</entry>
|
||||
<entry>10-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÓÉÓÔÅÍÎÏÇÏ ×ÙÚÏ×Á
|
||||
<function>aio_mlock</function> (ÒÅ×. <revnumber>251526</revnumber>).
|
||||
</entry>
|
||||
<function>aio_mlock</function> (ÒÅ×.
|
||||
<revnumber>251526</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>1000036</entry>
|
||||
<entry>9 ÉÀÌÑ 2013</entry>
|
||||
<entry>10-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÎÏ×ÏÊ ÆÕÎËÃÉÉ × ÐÒÏÇÒÁÍÍÎÙÊ
|
||||
ÉÎÔÅÒÆÅÊÓ ÍÏÄÕÌÑ ÑÄÒÁ GSSAPI (ÒÅ×. <revnumber>253049</revnumber>).
|
||||
</entry>
|
||||
ÉÎÔÅÒÆÅÊÓ ÍÏÄÕÌÑ ÑÄÒÁ GSSAPI (ÒÅ×.
|
||||
<revnumber>253049</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4519,8 +4514,8 @@
|
|||
<literal>mrt6stat</literal>, <literal>mrtstat</literal>,
|
||||
<literal>pfkeystat</literal>, <literal>pim6stat</literal>,
|
||||
<literal>pimstat</literal>, <literal>rip6stat</literal>,
|
||||
<literal>udpstat</literal> (ÒÅ×. <revnumber>253081</revnumber>).
|
||||
</entry>
|
||||
<literal>udpstat</literal> (ÒÅ×.
|
||||
<revnumber>253081</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4528,8 +4523,8 @@
|
|||
<entry>16 ÉÀÌÑ 2013</entry>
|
||||
<entry>10-CURRENT ÐÏÓÌÅ ÐÅÒÅËÌÀÞÅÎÉÑ ABI, ÉÓÐÏÌØÚÕÅÍÏÇÏ ÐÏ
|
||||
ÕÍÏÌÞÁÎÉÀ, ÎÁ <literal>ARM EABI</literal> ÄÌÑ ÁÒÈÉÔÅËÔÕÒ arm,
|
||||
armeb, armv6, and armv6eb (ÒÅ×. <revnumber>253396</revnumber>).
|
||||
</entry>
|
||||
armeb, armv6, and armv6eb (ÒÅ×.
|
||||
<revnumber>253396</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4579,8 +4574,8 @@
|
|||
<entry>15 Á×ÇÕÓÔÁ 2013</entry>
|
||||
<entry>10-CURRENT ÐÏÓÌÅ ÐÅÒÅ×ÏÄÁ <literal>libc.so</literal> ÎÁ
|
||||
ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÓÃÅÎÁÒÉÑ &man.ld.1; (ÒÅ×.
|
||||
<revnumber>251668</revnumber>, <revnumber>254358</revnumber>).
|
||||
</entry>
|
||||
<revnumber>251668</revnumber>,
|
||||
<revnumber>254358</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4598,8 +4593,8 @@
|
|||
<entry>10-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÆÌÁÇÏ× mbuf
|
||||
<literal>M_PROTO[9-12]</literal> É ÕÄÁÌÅÎÉÑ ÆÌÁÇÏ×
|
||||
<literal>M_FRAG|M_FIRSTFRAG|M_LASTFRAG</literal> (ÒÅ×.
|
||||
<revnumber>254524</revnumber>, <revnumber>254526</revnumber>).
|
||||
</entry>
|
||||
<revnumber>254524</revnumber>,
|
||||
<revnumber>254526</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4607,16 +4602,16 @@
|
|||
<entry>21 Á×ÇÕÓÔÁ 2013</entry>
|
||||
<entry>10-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ &man.stat.2;, ÐÏÚ×ÏÌÑÀÛÅÇÏ
|
||||
ÓÏÈÒÁÎÑÔØ ÎÅËÏÔÏÒÙÅ ÆÁÊÌÏ×ÙÅ ÁÔÒÉÂÕÔÙ Windows/DOS É CIFS ×
|
||||
ËÁÞÅÓÔ×Å ÆÌÁÇÏ× &man.stat.2; (ÒÅ×. <revnumber>254627</revnumber>).
|
||||
</entry>
|
||||
ËÁÞÅÓÔ×Å ÆÌÁÇÏ× &man.stat.2; (ÒÅ×.
|
||||
<revnumber>254627</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
<entry>1000048</entry>
|
||||
<entry>22 Á×ÇÕÓÔÁ 2013</entry>
|
||||
<entry>10-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÓÔÒÕËÔÕÒÙ
|
||||
<literal>xsctp_inpcb</literal> (ÒÅ×. <revnumber>254672</revnumber>).
|
||||
</entry>
|
||||
<literal>xsctp_inpcb</literal> (ÒÅ×.
|
||||
<revnumber>254672</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4632,8 +4627,9 @@
|
|||
<entry>1000050</entry>
|
||||
<entry>24 Á×ÇÕÓÔÁ 2013</entry>
|
||||
<entry>10-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÓÔÒÕËÔÕÒÙ <literal>mbuf</literal>
|
||||
(ÒÅ×. <revnumber>254780</revnumber>, <revnumber>254799</revnumber>,
|
||||
<revnumber>254804</revnumber>, <revnumber>254807</revnumber>
|
||||
(ÒÅ×. <revnumber>254780</revnumber>,
|
||||
<revnumber>254799</revnumber>, <revnumber>254804</revnumber>,
|
||||
<revnumber>254807</revnumber>,
|
||||
<revnumber>254842</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
|
@ -4641,8 +4637,8 @@
|
|||
<entry>1000051</entry>
|
||||
<entry>25 Á×ÇÕÓÔÁ 2013</entry>
|
||||
<entry>10-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ ÄÒÁÊ×ÅÒÁ Radeon KMS (ÒÅ×.
|
||||
<revnumber>254885</revnumber>, <revnumber>254887</revnumber>).
|
||||
</entry>
|
||||
<revnumber>254885</revnumber>,
|
||||
<revnumber>254887</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
@ -4717,8 +4713,9 @@
|
|||
<row>
|
||||
<entry>1000700</entry>
|
||||
<entry>7 ÄÅËÁÂÒÑ 2013</entry>
|
||||
<entry>10-STABLE ÐÏÓÌÅ ÏÔÄÅÌÅÎÉÑ ×ÅÔËÉ <literal>releng/10.0</literal>
|
||||
(ÒÅ×. <revnumber>259069</revnumber>).</entry>
|
||||
<entry>10-STABLE ÐÏÓÌÅ ÏÔÄÅÌÅÎÉÑ ×ÅÔËÉ
|
||||
<literal>releng/10.0</literal> (ÒÅ×.
|
||||
<revnumber>259069</revnumber>).</entry>
|
||||
</row>
|
||||
|
||||
<row>
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue