Whitespace fixes after PH split.

This commit is contained in:
Sergey Kandaurov 2014-07-12 14:08:49 +00:00
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

View file

@ -7,7 +7,8 @@
Original revision: r43844 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>
@ -25,6 +26,7 @@
<entry>ïÐÉÓÁÎÉÅ</entry> <entry>ïÐÉÓÁÎÉÅ</entry>
</row> </row>
</thead> </thead>
<tbody valign="top"> <tbody valign="top">
&values.uses; &values.uses;
</tbody> </tbody>
@ -36,8 +38,9 @@
<title>úÎÁÞÅÎÉÑ <literal>__FreeBSD_version</literal></title> <title>úÎÁÞÅÎÉÑ <literal>__FreeBSD_version</literal></title>
<para>îÉÖÅ ÄÌÑ ÓÐÒÁ×ËÉ ÐÒÉ×ÏÄÉÔÓÑ ÐÅÒÅÞÅÎØ ÚÎÁÞÅÎÉÊ <para>îÉÖÅ ÄÌÑ ÓÐÒÁ×ËÉ ÐÒÉ×ÏÄÉÔÓÑ ÐÅÒÅÞÅÎØ ÚÎÁÞÅÎÉÊ
<literal>__FreeBSD_version</literal> в виде, который определён в <literal>__FreeBSD_version</literal> в виде, который определён
<link xlink:href="http://svnweb.FreeBSD.org/base/head/sys/sys/param.h?view=markup">sys/param.h</link>:</para> в <link
xlink:href="http://svnweb.FreeBSD.org/base/head/sys/sys/param.h?view=markup">sys/param.h</link>:</para>
<table frame="none"> <table frame="none">
<title>úÎÁÞÅÎÉÑ <literal>__FreeBSD_version</literal></title> <title>úÎÁÞÅÎÉÑ <literal>__FreeBSD_version</literal></title>
@ -59,15 +62,15 @@
<note> <note>
<para>úÁÍÅÔØÔÅ, ÞÔÏ 2.2-STABLE ÉÎÏÇÄÁ ÉÄÅÎÔÉÆÉÃÉÒÕÅÔ ÓÅÂÑ ËÁË <para>úÁÍÅÔØÔÅ, ÞÔÏ 2.2-STABLE ÉÎÏÇÄÁ ÉÄÅÎÔÉÆÉÃÉÒÕÅÔ ÓÅÂÑ ËÁË
<quote>2.2.5-STABLE</quote> после 2.2.5-RELEASE. Такой принцип <quote>2.2.5-STABLE</quote> после 2.2.5-RELEASE. Такой
использовался год и месяц, но мы решили изменить его на более принцип использовался год и месяц, но мы решили изменить его
однозначную систему нумерации старший/младший, начиная с версии на более однозначную систему нумерации старший/младший,
2.2. Это объясняется тем, что параллельная разработка в нескольких начиная с версии 2.2. Это объясняется тем, что параллельная
ветках делает непрактичным идентификацию релизов просто по их разработка в нескольких ветках делает непрактичным
реальным датам выпуска. Если вы сейчас делаете порт, вам не стоит идентификацию релизов просто по их реальным датам выпуска.
заботиться о старых версиях -CURRENT; они перечислены здесь просто Если вы сейчас делаете порт, вам не стоит заботиться о старых
в информационных целях.</para> версиях -CURRENT; они перечислены здесь просто в
информационных целях.</para>
</note> </note>
</sect1> </sect1>
</chapter> </chapter>

View file

@ -7,7 +7,8 @@
Original revision: r43840 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>
@ -18,91 +19,100 @@
<sect1 xml:id="freshports"> <sect1 xml:id="freshports">
<title>FreshPorts</title> <title>FreshPorts</title>
<para>Самым простым способом отслеживать уже произошедшие обновления <para>Самым простым способом отслеживать уже произошедшие
является подписка на <link xlink:href="http://www.FreshPorts.org/"> обновления является подписка на <link xlink:href=
FreshPorts</link>. Для мониторинга вы можете выбрать несколько "http://www.FreshPorts.org/">FreshPorts</link>. Для
портов. Мейнтейнерам настоятельно рекомендуется подписаться здесь, мониторинга вы можете выбрать несколько портов. Мейнтейнерам
потому что они будут получать уведомления не только о собственных настоятельно рекомендуется подписаться здесь, потому что они
изменениях, но и об изменениях, сделанных любым другим коммиттером будут получать уведомления не только о собственных изменениях,
&os;. (Это часто необходимо для синхронизации с изменениями на более но и об изменениях, сделанных любым другим коммиттером &os;.
низком технологическом уровне&mdash;хотя более корректным было бы (Это часто необходимо для синхронизации с изменениями на более
получение предупреждений от тех, кто вносит подобные изменения, низком технологическом уровне&mdash;хотя более корректным было
иногда этот этап пропускается или он просто непрактичен. Кроме того, бы получение предупреждений от тех, кто вносит подобные
в некоторых случаях изменения по своей природе весьма незначительны. изменения, иногда этот этап пропускается или он просто
Мы полагаем, что любой разработчик в таких ситуациях будет непрактичен. Кроме того, в некоторых случаях изменения по
руководствоваться здравым смыслом).</para> своей природе весьма незначительны. Мы полагаем, что любой
разработчик в таких ситуациях будет руководствоваться здравым
смыслом).</para>
<para>Если вы хотите использовать FreshPorts, то вам нужна только <para>Если вы хотите использовать FreshPorts, то вам нужна только
учётная запись. Если регистрационный адрес вашей электронной почты учётная запись. Если регистрационный адрес вашей электронной
будет иметь вид <literal>@FreeBSD.org</literal>, то справа на почты будет иметь вид <literal>@FreeBSD.org</literal>, то
Web-страницах вы увидите дополнительную ссылку. Для тех из вас, кто справа на Web-страницах вы увидите дополнительную ссылку. Для
уже получил учётную запись FreshPorts, но не использовал собственный тех из вас, кто уже получил учётную запись FreshPorts, но не
адрес электронной почты <literal>@FreeBSD.org</literal>, достаточно использовал собственный адрес электронной почты
сменить адрес на <literal>@FreeBSD.org</literal>, подписаться, а <literal>@FreeBSD.org</literal>, достаточно сменить адрес на
затем сменить его обратно.</para> <literal>@FreeBSD.org</literal>, подписаться, а затем сменить
его обратно.</para>
<para>Во FreshPorts имеется также функция проверки правильности, <para>Во FreshPorts имеется также функция проверки правильности,
которая автоматически проверяет каждое изменение, внесённое в дерево которая автоматически проверяет каждое изменение, внесённое в
портов &os;. Если вы подпишетесь на эту услугу, то будете дерево портов &os;. Если вы подпишетесь на эту услугу, то
оповещаться обо всех ошибках, обнаруженных FreshPorts при проверке будете оповещаться обо всех ошибках, обнаруженных FreshPorts
внесённых вами изменений.</para> при проверке внесённых вами изменений.</para>
</sect1> </sect1>
<sect1 xml:id="svnweb"> <sect1 xml:id="svnweb">
<title>Web-интерфейс к хранилищу исходных текстов</title> <title>Web-интерфейс к хранилищу исходных текстов</title>
<para>Файлы в хранилище исходных текстов можно просматривать при помощи <para>Файлы в хранилище исходных текстов можно просматривать при
Web-интерфейса. Изменения, которые касаются в целом всей системы помощи Web-интерфейса. Изменения, которые касаются в целом
портов, теперь документируются в файле <link xlink:href="http://svnweb.FreeBSD.org/ports/head/CHANGES">CHANGES</link>. всей системы портов, теперь документируются в файле <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/UPDATING">UPDATING</link>.
Однако однозначный ответ на любой вопрос можно найти, только Однако однозначный ответ на любой вопрос можно найти, только
прочитав исходных код <link xlink:href="http://svnweb.FreeBSD.org/ports/head/Mk/bsd.port.mk">bsd.port.mk</link> прочитав исходных код <link
xlink:href="http://svnweb.FreeBSD.org/ports/head/Mk/bsd.port.mk">bsd.port.mk</link>
и связанных с ним файлов.</para> и связанных с ним файлов.</para>
</sect1> </sect1>
<sect1 xml:id="ports-mailing-list"> <sect1 xml:id="ports-mailing-list">
<title>Список рассылки &os;, посвящённый портам</title> <title>Список рассылки &os;, посвящённый портам</title>
<para>Если вы поддерживаете порты, то должны следить за &a.ports;. <para>Если вы поддерживаете порты, то должны следить за
О важных изменениях, отражающихся на работе портов, будет сообщаться &a.ports;. О важных изменениях, отражающихся на работе портов,
здесь, а затем они переносятся в <filename>CHANGES</filename>.</para> будет сообщаться здесь, а затем они переносятся в
<filename>CHANGES</filename>.</para>
<para>Если данный список рассылки слишком загружен сообщениями, <para>Если данный список рассылки слишком загружен сообщениями,
вы можете отслеживать &a.ports-announce.name;, который модерируется вы можете отслеживать &a.ports-announce.name;, который
и не является местом для дискуссий.</para> модерируется и не является местом для дискуссий.</para>
</sect1> </sect1>
<sect1 xml:id="build-cluster"> <sect1 xml:id="build-cluster">
<title>Кластер построения портов &os;</title> <title>Кластер построения портов &os;</title>
<para>Одной из наименее известных сильных сторон &os; является тот <para>Одной из наименее известных сильных сторон &os; является
факт, что для непрерывного построения Коллекции Портов для каждого тот факт, что для непрерывного построения Коллекции Портов для
из основных релизов ОС для каждой архитектуры уровня поддержки каждого из основных релизов ОС для каждой архитектуры уровня
Tier-1 выделен целый кластер машин.</para> поддержки Tier-1 выделен целый кластер машин.</para>
<para>Отдельные порты собираются, если они специально не помечены как <para>Отдельные порты собираются, если они специально не помечены
<varname>IGNORE</varname>. Для портов, помеченных как как <varname>IGNORE</varname>. Для портов, помеченных как
<varname>BROKEN</varname>, попытки будут продолжены для того, <varname>BROKEN</varname>, попытки будут продолжены для того,
чтобы увидеть, если основная проблема была решена. (Это сделано чтобы увидеть, если основная проблема была решена. (Это
через использование переменной <varname>TRYBROKEN</varname> для сделано через использование переменной
<filename>Makefile</filename> порта.)</para> <varname>TRYBROKEN</varname> для <filename>Makefile</filename>
порта.)</para>
</sect1> </sect1>
<sect1 xml:id="distfile-survey"> <sect1 xml:id="distfile-survey">
<title>Portscout: сканер дистрибутивных файлов портов &os;</title> <title>Portscout: сканер дистрибутивных файлов портов
&os;</title>
<para>Кластер построения выделен для выполнения самого последнего <para>Кластер построения выделен для выполнения самого последнего
релиза каждого из портов, дистрибутивные файлы которых уже были релиза каждого из портов, дистрибутивные файлы которых уже были
сгружены. Однако из-за постоянных изменений в Internet сгружены. Однако из-за постоянных изменений в Internet
дистрибутивные файлы могут быстро исчезать. <link xlink:href="http://portscout.FreeBSD.org">Portscout</link>, средство дистрибутивные файлы могут быстро исчезать. <link
сканирования дистрибутивных файлов &os; пытается опросить xlink:href="http://portscout.FreeBSD.org">Portscout</link>,
каждый из сайтов, доступных для сгрузки каждого из портов, средство сканирования дистрибутивных файлов &os; пытается
для определения того, доступны ли ещё дистрибутивные файлы. опросить каждый из сайтов, доступных для сгрузки каждого из
<application>Portscout</application> может готовить отчёты портов, для определения того, доступны ли ещё дистрибутивные
в <acronym>HTML</acronym> и рассылать электронные письма об файлы. <application>Portscout</application> может готовить
имеющихся обновлениях для портов тем, кто это запрашивает. отчёты в <acronym>HTML</acronym> и рассылать электронные письма
об имеющихся обновлениях для портов тем, кто это запрашивает.
Мейнтейнеры периодически запрашивают наличие изменений, либо Мейнтейнеры периодически запрашивают наличие изменений, либо
вручную, либо используя ленту <acronym>RSS</acronym>.</para> вручную, либо используя ленту <acronym>RSS</acronym>.</para>
@ -122,34 +132,36 @@
пользователю выполнять поиск конкретного порта.</para> пользователю выполнять поиск конкретного порта.</para>
<para>По щелчку на название порта в списке отображается информация <para>По щелчку на название порта в списке отображается информация
о порте <link xlink:href="http://freshports.org">FreshPorts</link>.</para> о порте <link
xlink:href="http://freshports.org">FreshPorts</link>.</para>
</sect1> </sect1>
<sect1 xml:id="portsmon"> <sect1 xml:id="portsmon">
<title>Система мониторинга портов &os;</title> <title>Система мониторинга портов &os;</title>
<para>Другим полезным ресурсом является <para>Другим полезным ресурсом является <link
<link xlink:href="http://portsmon.FreeBSD.org">Система мониторинга xlink:href="http://portsmon.FreeBSD.org">Система мониторинга
портов &os;</link> (известная также как <literal>portsmon</literal>). портов &os;</link> (известная также как
Система представляет собой базу данных, обрабатывающую информацию из <literal>portsmon</literal>). Система представляет собой базу
нескольких источников и позволяющую просматривать их при помощи данных, обрабатывающую информацию из нескольких источников и
Web-интерфейса. На данный момент задействованы база сообщений об позволяющую просматривать их при помощи Web-интерфейса. На
ошибках (PR), протоколы ошибок кластера построения и отдельные файлы данный момент задействованы база сообщений об ошибках (PR),
из коллекции портов. В будущем в этот список будет добавлена система протоколы ошибок кластера построения и отдельные файлы из
проверки дистрибутивных файлов и другие ресурсы.</para> коллекции портов. В будущем в этот список будет добавлена
система проверки дистрибутивных файлов и другие ресурсы.</para>
<para>Для начала вы можете просмотреть всю информацию о некотором порте <para>Для начала вы можете просмотреть всю информацию о некотором
при помощи средства <link xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Обзор порте при помощи средства <link
xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Обзор
отдельного порта</link>.</para> отдельного порта</link>.</para>
<para>На момент написания это единственный доступный ресурс, который <para>На момент написания это единственный доступный ресурс,
для имени порта ставит в соответствие записи PR GNATS. который для имени порта ставит в соответствие записи PR GNATS.
(Отправители PR не всегда добавляют в название имя порта, хотя (Отправители PR не всегда добавляют в название имя порта, хотя
мы предпочитаем, чтобы они это делали.) Таким образом, мы предпочитаем, чтобы они это делали.) Таким образом,
<literal>portsmon</literal> это хорошее место для начала, если вы <literal>portsmon</literal> это хорошее место для начала, если
хотите найти присланные PR и/или ошибки построения для существующего вы хотите найти присланные PR и/или ошибки построения для
порта; либо поискать, был ли уже прислан новый порт, который вы существующего порта; либо поискать, был ли уже прислан новый
подумывали создать сами.</para> порт, который вы подумывали создать сами.</para>
</sect1> </sect1>
</chapter> </chapter>

File diff suppressed because it is too large Load diff

View file

@ -7,41 +7,46 @@
Original revision: r43840 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>Ниже находятся некоторые указания по созданию нового порта для <para>Ниже находятся некоторые указания по созданию нового порта
&os;. Если вы хотите обновить существующий порт, вы должны для &os;. Если вы хотите обновить существующий порт, вы должны
ÐÒÏÞÅÓÔØ ÉÈ, Á ÚÁÔÅÍ <xref linkend="port-upgrading"/>.</para> ÐÒÏÞÅÓÔØ ÉÈ, Á ÚÁÔÅÍ <xref linkend="port-upgrading"/>.</para>
<para>Если этот документ недостаточно подробен, вы должны обратиться к <para>Если этот документ недостаточно подробен, вы должны
файлу <filename>/usr/ports/Mk/bsd.port.mk</filename>, который обратиться к файлу
включается в make-файл каждого порта. Он хорошо прокомментирован, и <filename>/usr/ports/Mk/bsd.port.mk</filename>, который
даже если вы не занимаетесь хакингом make-файлов каждодневно, из него включается в make-файл каждого порта. Он хорошо
вы сможете узнать много нового. Кроме того, конкретные вопросы можно прокомментирован, и даже если вы не занимаетесь хакингом
задать, послав письмо на адрес &a.ports;.</para> make-файлов каждодневно, из него вы сможете узнать много нового.
Кроме того, конкретные вопросы можно задать, послав письмо на
адрес &a.ports;.</para>
<note> <note>
<para>ôÏÌØËÏ ÞÁÓÔØ ÐÅÒÅÍÅÎÎÙÈ <para>ôÏÌØËÏ ÞÁÓÔØ ÐÅÒÅÍÅÎÎÙÈ
(<varname><replaceable>VAR</replaceable></varname>), которые могут быть (<varname><replaceable>VAR</replaceable></varname>), которые
переопределены, описаны в этом документе. Большинство (если не все) могут быть переопределены, описаны в этом документе.
описаны в начале файла <filename>/usr/ports/Mk/bsd.port.mk</filename>; Большинство (если не все) описаны в начале файла
остальные, скорее всего, тоже там описаны. Заметьте, что <filename>/usr/ports/Mk/bsd.port.mk</filename>; остальные,
в этом файле используется нестандартная настройка шага табуляции: скорее всего, тоже там описаны. Заметьте, что в этом файле
<application>Emacs</application> и <application>Vim</application> используется нестандартная настройка шага табуляции:
должны распознать это при загрузке файла. Как &man.vi.1;, <application>Emacs</application> и
так и &man.ex.1; могут быть настроены на использование <application>Vim</application> должны распознать это при
правильного значения выдачей команды <command>:set tabstop=4</command> загрузке файла. Как &man.vi.1;, так и &man.ex.1; могут быть
после загрузки файла.</para> настроены на использование правильного значения выдачей команды
<command>:set tabstop=4</command> после загрузки файла.</para>
</note> </note>
<para> <para>
Ищете, с чего бы начать попроще? Посмотрите на <link xlink:href="http://wiki.freebsd.org/WantedPorts">перечень запрошенных Ищете, с чего бы начать попроще? Посмотрите на <link
портов</link>, есть ли там такие, над которыми вы можете работать. xlink:href="http://wiki.freebsd.org/WantedPorts">перечень
</para> запрошенных портов</link>, есть ли там такие, над которыми вы
можете работать.</para>
</chapter> </chapter>

View file

@ -7,30 +7,35 @@
Original revision: r43840 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>åÓÔØ ÎÅÓËÏÌØËÏ ÐÒÉ£ÍÏ× ÒÁÂÏÔÙ Ó ÆÁÊÌÁÍÉ <para>åÓÔØ ÎÅÓËÏÌØËÏ ÐÒÉ£ÍÏ× ÒÁÂÏÔÙ Ó ÆÁÊÌÁÍÉ
<filename>pkg-*</filename>, которые мы ещё не <filename>pkg-*</filename>, которые мы ещё не описали, но они
описали, но они иногда могут быть очень кстати.</para> иногда могут быть очень кстати.</para>
<sect1 xml:id="porting-message"> <sect1 xml:id="porting-message">
<title><filename>pkg-message</filename></title> <title><filename>pkg-message</filename></title>
<para>Если вам нужно вывести сообщение для человека, устанавливающего <para>Если вам нужно вывести сообщение для человека,
приложение, то вы можете поместить сообщение в файл устанавливающего приложение, то вы можете поместить сообщение в
<filename>pkg-message</filename>. Эта возможность часто оказывается файл <filename>pkg-message</filename>. Эта возможность часто
полезной для вывода дополнительных шагов установки, которые нужно оказывается полезной для вывода дополнительных шагов установки,
предпринять после выполнения команды <command>pkg install</command>, которые нужно предпринять после выполнения команды
или для вывода информации о лицензировании.</para> <command>pkg install</command>, или для вывода информации о
лицензировании.</para>
<para>Если должны выводиться некоторые строки о knobs времени построения <para>Если должны выводиться некоторые строки о knobs времени
или предупреждения, используйте <varname>ECHO_MSG</varname>. Файл построения или предупреждения, используйте
<filename>pkg-message</filename> только для послеустановочных шагов. <varname>ECHO_MSG</varname>. Файл
Также следует иметь в виду различие между <varname>ECHO_MSG</varname> <filename>pkg-message</filename> только для послеустановочных
и <varname>ECHO_CMD</varname>. Первое предназначено для вывода на шагов. Также следует иметь в виду различие между
экран информационного текста, а второе для конвейера команд:</para> <varname>ECHO_MSG</varname> и <varname>ECHO_CMD</varname>.
Первое предназначено для вывода на экран информационного
текста, а второе для конвейера команд:</para>
<programlisting>update-etc-shells: <programlisting>update-etc-shells:
@${ECHO_MSG} "updating /etc/shells" @${ECHO_MSG} "updating /etc/shells"
@ -50,25 +55,27 @@
<para>åÓÌÉ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÂÉÎÁÒÎÏÇÏ ÐÁËÅÔÁ ÐÏ ËÏÍÁÎÄÅ <para>åÓÌÉ ÐÒÉ ÕÓÔÁÎÏ×ËÅ ÂÉÎÁÒÎÏÇÏ ÐÁËÅÔÁ ÐÏ ËÏÍÁÎÄÅ
<command>pkg add</command> ÉÌÉ <command>pkg install</command> <command>pkg add</command> ÉÌÉ <command>pkg install</command>
вашему порту нужно выполнить какие-то команды, то вы можете вашему порту нужно выполнить какие-то команды, то вы можете это
это сделать с помощью скрипта <filename>pkg-install</filename>. сделать с помощью скрипта <filename>pkg-install</filename>.
üÔÏÔ ÓËÒÉÐÔ ÂÕÄÅÔ Á×ÔÏÍÁÔÉÞÅÓËÉ ÄÏÂÁ×ÌÅÎ Ë ÐÁËÅÔÕ É ÂÕÄÅÔ üÔÏÔ ÓËÒÉÐÔ ÂÕÄÅÔ Á×ÔÏÍÁÔÉÞÅÓËÉ ÄÏÂÁ×ÌÅÎ Ë ÐÁËÅÔÕ É ÂÕÄÅÔ
Ä×ÁÖÄÙ ÚÁÐÕÓËÁÔØÓÑ ËÏÍÁÎÄÏÊ <command>pkg</command>: ÐÅÒ×ÙÊ ÒÁÚ Ä×ÁÖÄÙ ÚÁÐÕÓËÁÔØÓÑ ËÏÍÁÎÄÏÊ <command>pkg</command>: ÐÅÒ×ÙÊ ÒÁÚ
× ×ÉÄÅ <literal>&dollar;{SH} pkg-install &dollar;{PKGNAME} × ×ÉÄÅ <literal>&dollar;{SH} pkg-install &dollar;{PKGNAME}
PRE-INSTALL</literal>, Á ×ÔÏÒÏÊ ÒÁÚ ËÁË PRE-INSTALL</literal>, Á ×ÔÏÒÏÊ ÒÁÚ ËÁË
<literal>&dollar;{SH} {PKGNAME} POST-INSTALL</literal>. <literal>&dollar;{SH} {PKGNAME} POST-INSTALL</literal>. Для
Для распознавания того, в каком режиме запущен скрипт, можно распознавания того, в каком режиме запущен скрипт, можно
ÉÓÐÏÌØÚÏ×ÁÔØ ÐÁÒÁÍÅÔÒ <literal>&dollar;2</literal>. ðÅÒÅÍÅÎÎÁÑ ÉÓÐÏÌØÚÏ×ÁÔØ ÐÁÒÁÍÅÔÒ <literal>&dollar;2</literal>. ðÅÒÅÍÅÎÎÁÑ
ÏËÒÕÖÅÎÉÑ <envar>PKG_PREFIX</envar> ÂÕÄÅÔ ÐÒÉÎÉÍÁÔØ ÚÎÁÞÅÎÉÅ, ÏËÒÕÖÅÎÉÑ <envar>PKG_PREFIX</envar> ÂÕÄÅÔ ÐÒÉÎÉÍÁÔØ ÚÎÁÞÅÎÉÅ,
соответствующее каталогу, в который устанавливается пакет.</para> соответствующее каталогу, в который устанавливается
пакет.</para>
<note> <note>
<para>üÔÏÔ ÓËÒÉÐÔ ÎÅ ÚÁÐÕÓËÁÅÔÓÑ Á×ÔÏÍÁÔÉÞÅÓËÉ, ÅÓÌÉ ×Ù <para>üÔÏÔ ÓËÒÉÐÔ ÎÅ ÚÁÐÕÓËÁÅÔÓÑ Á×ÔÏÍÁÔÉÞÅÓËÉ, ÅÓÌÉ ×Ù
ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÅ ÐÏÒÔ ËÏÍÁÎÄÏÊ <command>make install</command>. ÕÓÔÁÎÁ×ÌÉ×ÁÅÔÅ ÐÏÒÔ ËÏÍÁÎÄÏÊ <command>make install</command>.
Если же вам действительно необходимо его запустить, то запустите Если же вам действительно необходимо его запустить, то
его явно из файла <filename>Makefile</filename> порта строкой запустите его явно из файла <filename>Makefile</filename>
вида <literal>PKG_PREFIX=&dollar;{PREFIX} &dollar;{SH} &dollar; порта строкой вида <literal>PKG_PREFIX=&dollar;{PREFIX}
{PKGINSTALL}&dollar;{PKGNAME} PRE-INSTALL</literal>.</para> &dollar;{SH} &dollar; {PKGINSTALL}&dollar;{PKGNAME}
PRE-INSTALL</literal>.</para>
</note> </note>
</sect1> </sect1>
@ -78,10 +85,10 @@
<para>üÔÏÔ ÓËÒÉÐÔ ×ÙÚÙ×ÁÅÔÓÑ ÐÒÉ ÕÄÁÌÅÎÉÉ ÐÁËÅÔÁ.</para> <para>üÔÏÔ ÓËÒÉÐÔ ×ÙÚÙ×ÁÅÔÓÑ ÐÒÉ ÕÄÁÌÅÎÉÉ ÐÁËÅÔÁ.</para>
<para>üÔÏÔ ÓËÒÉÐÔ ÂÕÄÅÔ Ä×ÁÖÄÙ ÚÁÐÕÓËÁÔØÓÑ ËÏÍÁÎÄÏÊ <para>üÔÏÔ ÓËÒÉÐÔ ÂÕÄÅÔ Ä×ÁÖÄÙ ÚÁÐÕÓËÁÔØÓÑ ËÏÍÁÎÄÏÊ
<command>pkg delete</command>. <command>pkg delete</command>. Первый раз как
Первый раз как <literal>&dollar;{SH} pkg-deinstall
&dollar;{PKGNAME} DEINSTALL</literal>, а второй раз как
<literal>&dollar;{SH} pkg-deinstall &dollar;{PKGNAME} <literal>&dollar;{SH} pkg-deinstall &dollar;{PKGNAME}
DEINSTALL</literal>, а второй раз как <literal>&dollar;{SH}
pkg-deinstall &dollar;{PKGNAME}
POST-DEINSTALL</literal>.</para> POST-DEINSTALL</literal>.</para>
</sect1> </sect1>
@ -89,20 +96,19 @@
<title xml:id="porting-pkgfiles">éÚÍÅÎÅÎÉÅ ÉͣΠÆÁÊÌÏ× <title xml:id="porting-pkgfiles">éÚÍÅÎÅÎÉÅ ÉͣΠÆÁÊÌÏ×
<filename>pkg-*</filename></title> <filename>pkg-*</filename></title>
<para>Все имена файлов <para>Все имена файлов <filename>pkg-*</filename> определяются с
<filename>pkg-*</filename> помощью переменных, так что вы можете изменить их, если это
определяются с помощью переменных, так что вы можете изменить их, нужно, в вашем файле <filename>Makefile</filename>. Это
если это нужно, в вашем файле <filename>Makefile</filename>. Это
ÏÓÏÂÅÎÎÏ ÐÏÌÅÚÎÏ, ÅÓÌÉ ×Ù ÉÓÐÏÌØÚÕÅÔÅ ÏÄÎÉ É ÔÅ ÖÅ ÆÁÊÌÙ ÏÓÏÂÅÎÎÏ ÐÏÌÅÚÎÏ, ÅÓÌÉ ×Ù ÉÓÐÏÌØÚÕÅÔÅ ÏÄÎÉ É ÔÅ ÖÅ ÆÁÊÌÙ
<filename>pkg-*</filename> <filename>pkg-*</filename> совместно между несколькими портами
совместно между несколькими портами или или пишете в один из вышеперечисленных файлов (в главе о <link
пишете в один из вышеперечисленных файлов (в главе о <link linkend="porting-wrkdir">записи в каталоги, отличные от linkend="porting-wrkdir">записи в каталоги, отличные от
<varname>WRKDIR</varname></link> объяснено, почему не рекомендуется <varname>WRKDIR</varname></link> объяснено, почему не
осуществлять запись непосредственно в файлы рекомендуется осуществлять запись непосредственно в файлы
<filename>pkg-*</filename>.</para> <filename>pkg-*</filename>.</para>
<para>Вот список имён переменных и их значений по умолчанию. (Значение <para>Вот список имён переменных и их значений по умолчанию.
<varname>PKGDIR</varname> по умолчанию равно (Значение <varname>PKGDIR</varname> по умолчанию равно
<varname>${MASTERDIR}</varname>.)</para> <varname>${MASTERDIR}</varname>.)</para>
<informaltable frame="none" pgwide="0"> <informaltable frame="none" pgwide="0">
@ -110,7 +116,6 @@
<thead> <thead>
<row> <row>
<entry>ðÅÒÅÍÅÎÎÁÑ</entry> <entry>ðÅÒÅÍÅÎÎÁÑ</entry>
<entry>úÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ</entry> <entry>úÎÁÞÅÎÉÅ ÐÏ ÕÍÏÌÞÁÎÉÀ</entry>
</row> </row>
</thead> </thead>
@ -131,6 +136,11 @@
<entry><literal>${PKGDIR}/pkg-install</literal></entry> <entry><literal>${PKGDIR}/pkg-install</literal></entry>
</row> </row>
<row>
<entry><varname>PKGDEINSTALL</varname></entry>
<entry><literal>${PKGDIR}/pkg-deinstall</literal></entry>
</row>
<row> <row>
<entry><varname>PKGMESSAGE</varname></entry> <entry><varname>PKGMESSAGE</varname></entry>
<entry><literal>${PKGDIR}/pkg-message</literal></entry> <entry><literal>${PKGDIR}/pkg-message</literal></entry>
@ -141,8 +151,8 @@
<para>ðÏÖÁÌÕÊÓÔÁ, ÉÚÍÅÎÑÊÔÅ ÚÎÁÞÅÎÉÑ ÜÔÉÈ ÐÅÒÅÍÅÎÎÙÈ, Á ÎÅ <para>ðÏÖÁÌÕÊÓÔÁ, ÉÚÍÅÎÑÊÔÅ ÚÎÁÞÅÎÉÑ ÜÔÉÈ ÐÅÒÅÍÅÎÎÙÈ, Á ÎÅ
ÐÅÒÅÏÐÒÅÄÅÌÑÊÔÅ <varname>PKG_ARGS</varname>. åÓÌÉ ×Ù ÉÚÍÅÎÉÔÅ ÐÅÒÅÏÐÒÅÄÅÌÑÊÔÅ <varname>PKG_ARGS</varname>. åÓÌÉ ×Ù ÉÚÍÅÎÉÔÅ
значение переменных <varname>PKG_ARGS</varname>, то эти файлы при значение переменных <varname>PKG_ARGS</varname>, то эти файлы
установке из порта будут установлены в каталог при установке из порта будут установлены в каталог
<filename>/var/db/pkg</filename> ÎÅËÏÒÒÅËÔÎÏ.</para> <filename>/var/db/pkg</filename> ÎÅËÏÒÒÅËÔÎÏ.</para>
</sect1> </sect1>
@ -152,35 +162,36 @@
<para>ðÅÒÅÍÅÎÎÙÅ <varname>SUB_FILES</varname> É <para>ðÅÒÅÍÅÎÎÙÅ <varname>SUB_FILES</varname> É
<varname>SUB_LIST</varname> ÐÏÄÈÏÄÑÔ ÄÌÑ ÚÁÄÁÎÉÑ × ÆÁÊÌÁÈ ÐÏÒÔÁ <varname>SUB_LIST</varname> ÐÏÄÈÏÄÑÔ ÄÌÑ ÚÁÄÁÎÉÑ × ÆÁÊÌÁÈ ÐÏÒÔÁ
динамических значений, таких как <varname>PREFIX</varname> установки динамических значений, таких как <varname>PREFIX</varname>
в <filename>pkg-message</filename>.</para> установки в <filename>pkg-message</filename>.</para>
<para>В переменной <varname>SUB_FILES</varname> указывается перечень <para>В переменной <varname>SUB_FILES</varname> указывается
файлов для автоматического изменения. Каждый перечень файлов для автоматического изменения. Каждый
<replaceable>file</replaceable> из перечня <varname>SUB_FILES</varname> <replaceable>file</replaceable> из перечня
обязан иметь соответствующий <varname>SUB_FILES</varname> обязан иметь соответствующий
<filename>file.in</filename>, <filename>file.in</filename>, присутствующий в
присутствующий в <varname>FILESDIR</varname>. Измененная версия <varname>FILESDIR</varname>. Измененная версия будет создана в
будет создана в <varname>WRKDIR</varname>. Файлы, определенные в <varname>WRKDIR</varname>. Файлы, определенные в качестве
качестве значения <varname>USE_RC_SUBR</varname> (или устаревшего значения <varname>USE_RC_SUBR</varname> (или устаревшего
<varname>USE_RCORDER</varname>), Á×ÔÏÍÁÔÉÞÅÓËÉ ÄÏÂÁ×ÌÑÀÔÓÑ × <varname>USE_RCORDER</varname>), Á×ÔÏÍÁÔÉÞÅÓËÉ ÄÏÂÁ×ÌÑÀÔÓÑ ×
<varname>SUB_FILES</varname>. äÌÑ ÆÁÊÌÏ× <varname>SUB_FILES</varname>. äÌÑ ÆÁÊÌÏ×
<filename>pkg-message</filename>, <filename>pkg-install</filename> <filename>pkg-message</filename>,
и <filename>pkg-deinstall</filename> <filename>pkg-install</filename> и
устанавливается соответствующая переменная Makefile, указывающая на <filename>pkg-deinstall</filename> устанавливается
соответствующая переменная Makefile, указывающая на
ÏÂÒÁÂÏÔÁÎÎÕÀ ×ÅÒÓÉÀ.</para> ÏÂÒÁÂÏÔÁÎÎÕÀ ×ÅÒÓÉÀ.</para>
<para>Переменная <varname>SUB_LIST</varname> содержит перечень пар <para>Переменная <varname>SUB_LIST</varname> содержит перечень
<literal>VAR=VALUE</literal>. В каждом файле из пар <literal>VAR=VALUE</literal>. В каждом файле из
<varname>SUB_FILES</varname> ÄÌÑ ËÁÖÄÏÊ ÐÁÒÙ ÂÕÄÅÔ ÐÒÏÉÚ×ÅÄÅÎÁ <varname>SUB_FILES</varname> ÄÌÑ ËÁÖÄÏÊ ÐÁÒÙ ÂÕÄÅÔ ÐÒÏÉÚ×ÅÄÅÎÁ
ÚÁÍÅÎÁ <literal>%%VAR%%</literal> ÎÁ <literal>VALUE</literal>. ÚÁÍÅÎÁ <literal>%%VAR%%</literal> ÎÁ <literal>VALUE</literal>.
îÅËÏÔÏÒÙÅ ÏÂÝÉÅ ÐÁÒÙ ÏÐÒÅÄÅÌÑÀÔÓÑ Á×ÔÏÍÁÔÉÞÅÓËÉ: îÅËÏÔÏÒÙÅ ÏÂÝÉÅ ÐÁÒÙ ÏÐÒÅÄÅÌÑÀÔÓÑ Á×ÔÏÍÁÔÉÞÅÓËÉ:
<varname>PREFIX</varname>, <varname>LOCALBASE</varname>, <varname>PREFIX</varname>, <varname>LOCALBASE</varname>,
<varname>DATADIR</varname>, <varname>DATADIR</varname>, <varname>DOCSDIR</varname>,
<varname>DOCSDIR</varname>, <varname>EXAMPLESDIR</varname>, <varname>EXAMPLESDIR</varname>, <varname>WWWDIR</varname> и
<varname>WWWDIR</varname> и <varname>ETCDIR</varname>. <varname>ETCDIR</varname>. Любая строка, начинающаяся с
Любая строка, начинающаяся с <literal>@comment</literal>, будет <literal>@comment</literal>, будет удалена из конечного файла
удалена из конечного файла после подстановки переменной.</para> после подстановки переменной.</para>
<para>÷ ÓÌÅÄÕÀÝÅÍ ÐÒÉÍÅÒÅ × <filename>pkg-message</filename> <para>÷ ÓÌÅÄÕÀÝÅÍ ÐÒÉÍÅÒÅ × <filename>pkg-message</filename>
ÂÕÄÅÔ ÓÄÅÌÁÎÁ ÚÁÍÅÎÁ <literal>%%ARCH%%</literal> ÎÁ ÓÉÓÔÅÍÎÕÀ ÂÕÄÅÔ ÓÄÅÌÁÎÁ ÚÁÍÅÎÁ <literal>%%ARCH%%</literal> ÎÁ ÓÉÓÔÅÍÎÕÀ
@ -189,16 +200,14 @@
<programlisting>SUB_FILES= pkg-message <programlisting>SUB_FILES= pkg-message
SUB_LIST= ARCH=${ARCH}</programlisting> SUB_LIST= ARCH=${ARCH}</programlisting>
<para>Обратите внимание, что в этом примере в <varname>FILESDIR</varname> <para>Обратите внимание, что в этом примере в
обязательно существование файла <filename>pkg-message.in</filename>. <varname>FILESDIR</varname> обязательно существование файла
</para> <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 Copy %%PREFIX%%/share/examples/putsy/%%ARCH%%.conf into your home directory
as .putsy.conf and edit it.</programlisting> as .putsy.conf and edit it.</programlisting>
</sect1> </sect1>
</chapter> </chapter>

View file

@ -7,57 +7,67 @@
Original revision: r43840 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> <title>Продвинутые практики <filename>pkg-plist</filename></title>
<sect1 xml:id="plist-sub"> <sect1 xml:id="plist-sub">
<title>Изменение содержимого <filename>pkg-plist</filename> в зависимости <title>Изменение содержимого <filename>pkg-plist</filename> в
от make-переменных</title> зависимости от make-переменных</title>
<para>Некоторые порты, в частности, порты <literal>p5-</literal>, должны <para>Некоторые порты, в частности, порты <literal>p5-</literal>,
менять содержимое своих файлов <filename>pkg-plist</filename> в должны менять содержимое своих файлов
зависимости от того, с какими параметрами они были отконфигурированы <filename>pkg-plist</filename> в зависимости от того, с какими
(или в зависимости от версии языка <literal>perl</literal> в случае параметрами они были отконфигурированы (или в зависимости от
портов <literal>p5-</literal>). Чтобы облегчить этот версии языка <literal>perl</literal> в случае портов
процесс, любые вхождения ключевых слов <literal>%%OSREL%%</literal>, <literal>p5-</literal>). Чтобы облегчить этот процесс, любые
<literal>%%PERL_VER%%</literal> и <literal>%%PERL_VERSION%%</literal> вхождения ключевых слов <literal>%%OSREL%%</literal>,
в файле <filename>pkg-plist</filename> будут заменяться соответствующими <literal>%%PERL_VER%%</literal> и
значениями. Значением <literal>%%OSREL%%</literal> является номер <literal>%%PERL_VERSION%%</literal> в файле
версии операционной системы (например, <literal>4.9</literal>). <filename>pkg-plist</filename> будут заменяться
<literal>%%PERL_VERSION%%</literal> и <literal>%%PERL_VER%%</literal> соответствующими значениями. Значением
обозначают полный номер версии <command>perl</command> (например, <literal>%%OSREL%%</literal> является номер версии операционной
<literal>5.8.9</literal>). Некоторые системы (например, <literal>4.9</literal>).
другие <literal>%%VARS%%</literal>, имеющие <literal>%%PERL_VERSION%%</literal> и
отношение к файлам документации порта, описаны в <link linkend="install-documentation">соответствующем разделе</link>.</para> <literal>%%PERL_VER%%</literal> обозначают полный номер версии
<command>perl</command> (например, <literal>5.8.9</literal>).
Некоторые другие <literal>%%VARS%%</literal>, имеющие отношение
к файлам документации порта, описаны в <link
linkend="install-documentation">соответствующем
разделе</link>.</para>
<para>Если вам нужно сделать другие подстановки, вы можете указать в <para>Если вам нужно сделать другие подстановки, вы можете
переменной <varname>PLIST_SUB</varname> список пар указать в переменной <varname>PLIST_SUB</varname> список пар
<literal>VAR=VALUE</literal>, <literal>VAR=VALUE</literal>, и все вхождения
и все вхождения <literal>%%VAR%%</literal> <literal>%%VAR%%</literal> в файле
в файле <filename>pkg-plist</filename> будут заменяться на значение <filename>pkg-plist</filename> будут заменяться на значение
<replaceable>VALUE</replaceable>.</para> <replaceable>VALUE</replaceable>.</para>
<para>Например, если у вас имеется порт, который устанавливает много <para>Например, если у вас имеется порт, который устанавливает
файлов в каталог, зависящий от версии, вы можете задать нечто много файлов в каталог, зависящий от версии, вы можете задать
типа</para> нечто типа</para>
<programlisting>OCTAVE_VERSION= 2.0.13 <programlisting>OCTAVE_VERSION= 2.0.13
PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}</programlisting> PLIST_SUB= OCTAVE_VERSION=${OCTAVE_VERSION}</programlisting>
<para>в файле <filename>Makefile</filename> и использовать <para>в файле <filename>Makefile</filename> и использовать
<literal>%%OCTAVE_VERSION%%</literal> везде, где нужно указать <literal>%%OCTAVE_VERSION%%</literal> везде, где нужно указать
номер версии в файле <filename>pkg-plist</filename>. Таким образом, номер версии в файле <filename>pkg-plist</filename>. Таким
при обновлении порта вам не нужно будет менять десятки (а в некоторых образом, при обновлении порта вам не нужно будет менять десятки
случаях и сотни) строк в файле <filename>pkg-plist</filename>.</para> (а в некоторых случаях и сотни) строк в файле
<filename>pkg-plist</filename>.</para>
<para>Если ваш порт устанавливает файлы в соответствии с установленными <para>Если ваш порт устанавливает файлы в соответствии с
в порту опциями, то обычным способом управления является добавление установленными в порту опциями, то обычным способом управления
префиксов <literal>%%TAG%%</literal> для строк является добавление префиксов <literal>%%TAG%%</literal> для
<filename>pkg-plist</filename> с добавлением этого строк <filename>pkg-plist</filename> с добавлением этого
<literal>TAG</literal> в переменную <varname>PLIST_SUB</varname> <literal>TAG</literal> в переменную
внутри <filename>Makefile</filename> со специальным значением <varname>PLIST_SUB</varname> внутри
<literal>@comment</literal>, которое указывает пакетным инструментам <filename>Makefile</filename> со специальным значением
игнорировать эти строки:</para> <literal>@comment</literal>, которое указывает пакетным
инструментам игнорировать эти строки:</para>
<programlisting>.if defined(WITH_X11) <programlisting>.if defined(WITH_X11)
PLIST_SUB+= X11="" PLIST_SUB+= X11=""
@ -69,40 +79,40 @@ PLIST_SUB+= X11="@comment "
<programlisting>%%X11%%bin/foo-gui</programlisting> <programlisting>%%X11%%bin/foo-gui</programlisting>
<para>Эта подстановка будет сделана <para>Эта подстановка будет сделана между выполнением целей
между выполнением целей <buildtarget>pre-install</buildtarget> и <buildtarget>pre-install</buildtarget> и
<buildtarget>do-install</buildtarget>, посредством чтения файла <buildtarget>do-install</buildtarget>, посредством чтения файла
<filename>PLIST</filename> и записью в файл <filename>PLIST</filename> и записью в файл
<filename>TMPPLIST</filename> <filename>TMPPLIST</filename> (по умолчанию это файл
(по умолчанию это файл <filename>WRKDIR/.PLIST.mktmp</filename>). Так что если ваш
<filename>WRKDIR/.PLIST.mktmp</filename>). Так порт строит <filename>PLIST</filename> на лету, делайте это во
что если ваш порт строит <filename>PLIST</filename> на лету, делайте время или до выполнения цели
это во время или до выполнения цели <buildtarget>pre-install</buildtarget>. Кроме того, если
<buildtarget>pre-install</buildtarget>. Кроме того, если вашему порту вашему порту требуется отредактировать получающийся файл,
требуется отредактировать получающийся файл, делайте это в цели делайте это в цели <buildtarget>post-install</buildtarget>
<buildtarget>post-install</buildtarget> изменением файла изменением файла <filename>TMPPLIST</filename>.</para>
<filename>TMPPLIST</filename>.</para>
<para>Другой способ изменения списка сборки порта основан на <para>Другой способ изменения списка сборки порта основан на
определении значений переменных <varname>PLIST_FILES</varname>, определении значений переменных <varname>PLIST_FILES</varname>,
<varname>PLIST_DIRS</varname> и <varname>PLIST_DIRSTRY</varname>. <varname>PLIST_DIRS</varname> и
Каждое из них рассматривается как перечень путей для записи в <varname>PLIST_DIRSTRY</varname>. Каждое из них
рассматривается как перечень путей для записи в
<filename>TMPPLIST</filename> содержимого <filename>TMPPLIST</filename> содержимого
<filename>PLIST</filename>. Имена, перечисленные <filename>PLIST</filename>. Имена, перечисленные в
в <varname>PLIST_FILES</varname>, <varname>PLIST_DIRS</varname> <varname>PLIST_FILES</varname>, <varname>PLIST_DIRS</varname> и
и <varname>PLIST_DIRSTRY</varname> подвергаются подстановке <varname>PLIST_DIRSTRY</varname> подвергаются подстановке
<literal>%%VAR%%</literal>, как описано <literal>%%VAR%%</literal>, как описано выше. За исключением
выше. За исключением этого, имена из <varname>PLIST_FILES</varname> этого, имена из <varname>PLIST_FILES</varname> будут появляться
будут появляться в окончательном варианте перечня сборки без в окончательном варианте перечня сборки без изменений, тогда
изменений, тогда как <literal>@dirrm</literal> и как <literal>@dirrm</literal> и <literal>@dirrmtry</literal>
<literal>@dirrmtry</literal> будут соответственно предшествовать будут соответственно предшествовать именам из
именам из <varname>PLIST_DIRS</varname> и <varname>PLIST_DIRS</varname> и
<varname>PLIST_DIRSTRY</varname>. Для того чтобы изменения <varname>PLIST_DIRSTRY</varname>. Для того чтобы изменения
вступили в силу, <varname>PLIST_FILES</varname>, вступили в силу, <varname>PLIST_FILES</varname>,
<varname>PLIST_DIRS</varname> и <varname>PLIST_DIRSTRY</varname> <varname>PLIST_DIRS</varname> и
должны задаваться до того, как будет <varname>PLIST_DIRSTRY</varname> должны задаваться до того, как
записываться <filename>TMPPLIST</filename>, то будет записываться <filename>TMPPLIST</filename>, то есть в
есть в цели <buildtarget>pre-install</buildtarget> или ещё цели <buildtarget>pre-install</buildtarget> или ещё
раньше.</para> раньше.</para>
</sect1> </sect1>
@ -112,33 +122,32 @@ PLIST_SUB+= X11="@comment "
<sect2 xml:id="plist-dir-cleaning"> <sect2 xml:id="plist-dir-cleaning">
<title>Очистка пустых каталогов</title> <title>Очистка пустых каталогов</title>
<para>Заставьте ваш порты удалять пустые каталоги при удалении. Обычно это <para>Заставьте ваш порты удалять пустые каталоги при удалении.
достигается добавлением строк <literal>@dirrm</literal> для всех Обычно это достигается добавлением строк
каталогов, которые создаются этим портом. Вам нужно удалить <literal>@dirrm</literal> для всех каталогов, которые
подкаталоги до того, как вы сможете удалить родительские создаются этим портом. Вам нужно удалить подкаталоги до
каталоги.</para> того, как вы сможете удалить родительские каталоги.</para>
<programlisting> <programlisting> :
:
lib/X11/oneko/pixmaps/cat.xpm lib/X11/oneko/pixmaps/cat.xpm
lib/X11/oneko/sounds/cat.au lib/X11/oneko/sounds/cat.au
: :
@dirrm lib/X11/oneko/pixmaps @dirrm lib/X11/oneko/pixmaps
@dirrm lib/X11/oneko/sounds @dirrm lib/X11/oneko/sounds
@dirrm lib/X11/oneko @dirrm lib/X11/oneko</programlisting>
</programlisting>
<para>Однако, иногда <literal>@dirrm</literal> будет выдавать ошибки, <para>Однако, иногда <literal>@dirrm</literal> будет выдавать
потому что другие порты используют тот же самый подкаталог. Вы ошибки, потому что другие порты используют тот же самый
можете использовать <literal>@dirrmtry</literal> для удаления подкаталог. Вы можете использовать
только пустых каталогов без выдачи предупреждений.</para> <literal>@dirrmtry</literal> для удаления только пустых
каталогов без выдачи предупреждений.</para>
<programlisting>@dirrmtry share/doc/gimp</programlisting> <programlisting>@dirrmtry share/doc/gimp</programlisting>
<para>Эта команда не выведет никаких сообщений об ошибках и не вызовет <para>Эта команда не выведет никаких сообщений об ошибках и не
аварийного завершения работы <command>pkg delete</command> вызовет аварийного завершения работы
(см. &man.pkg-delete.8;), даже если <command>pkg delete</command> (см. &man.pkg-delete.8;), даже
каталог <filename>${PREFIX}/share/doc/gimp</filename> если каталог <filename>${PREFIX}/share/doc/gimp</filename>
не пуст из-за того, что другие порты установили сюда какие-то не пуст из-за того, что другие порты установили сюда какие-то
файлы.</para> файлы.</para>
</sect2> </sect2>
@ -146,39 +155,39 @@ lib/X11/oneko/sounds/cat.au
<sect2 xml:id="plist-dir-empty"> <sect2 xml:id="plist-dir-empty">
<title>Создание пустых каталогов</title> <title>Создание пустых каталогов</title>
<para>Пустым каталогам, создаваемым во время установки порта, нужно <para>Пустым каталогам, создаваемым во время установки порта,
особое внимание. Они не будут созданы при установке пакета, потому нужно особое внимание. Они не будут созданы при установке
что пакеты содержат только файлы, а <command>pkg add</command> пакета, потому что пакеты содержат только файлы, а
и <command>pkg install</command> создают для них <command>pkg add</command> и <command>pkg install</command>
каталоги по мере надобности. Чтобы убедиться, что пустой каталог создают для них каталоги по мере надобности. Чтобы
создается при установке пакета, добавьте эту строку в убедиться, что пустой каталог создается при установке пакета,
<filename>pkg-plist</filename> перед соответствующей строкой добавьте эту строку в <filename>pkg-plist</filename> перед
<literal>@dirrm</literal>:</para> соответствующей строкой <literal>@dirrm</literal>:</para>
<programlisting>@exec mkdir -p %D/share/foo/templates</programlisting> <programlisting>@exec mkdir -p %D/share/foo/templates</programlisting>
</sect2> </sect2>
</sect1> </sect1>
<sect1 xml:id="plist-config"> <sect1 xml:id="plist-config">
<title>Конфигурационные файлы</title> <title>Конфигурационные файлы</title>
<para>Если ваш порт устанавливает конфигурационные файлы в каталог <para>Если ваш порт устанавливает конфигурационные файлы в
<filename>PREFIX/etc</filename> (или куда-то еще), каталог <filename>PREFIX/etc</filename> (или куда-то еще),
<emphasis>не</emphasis> делайте их простого перечисления в файле <emphasis>не</emphasis> делайте их простого перечисления в
<filename>pkg-plist</filename>. Это приведёт к тому, что по команде файле <filename>pkg-plist</filename>. Это приведёт к тому, что
<command>pkg delete</command> или при новой установке файлы, по команде <command>pkg delete</command> или при новой
тщательно отредактированные и настроенные пользователем, будут установке файлы, тщательно отредактированные и настроенные
уничтожены.</para> пользователем, будут уничтожены.</para>
<para>Вместо этого установите файл(ы) с примерами с расширением <para>Вместо этого установите файл(ы) с примерами с расширением
<filename>filename.sample</filename>. <filename>filename.sample</filename>. Затем скопируйте файл с
Затем скопируйте файл с примером на место настоящего файла примером на место настоящего файла конфигурации, если таковой
конфигурации, если таковой ещё не существует. При деинсталляции ещё не существует. При деинсталляции удаляйте файл
удаляйте файл конфигурации только в том случае, если он идентичен конфигурации только в том случае, если он идентичен файлу с
файлу с расширением <filename>.sample</filename>. Вам расширением <filename>.sample</filename>. Вам нужно управлять
нужно управлять этим в <filename>Makefile</filename> и в этим в <filename>Makefile</filename> и в
<filename>pkg-plist</filename> (для установки из пакета).</para> <filename>pkg-plist</filename> (для установки из
пакета).</para>
<para>Пример части <filename>Makefile</filename>:</para> <para>Пример части <filename>Makefile</filename>:</para>
@ -197,88 +206,93 @@ etc/orbit.conf.sample
<para>Данные строки являются упорядоченными. На этапе удаления <para>Данные строки являются упорядоченными. На этапе удаления
файл с примером сравнивается с рабочим конфигурационным файлом. файл с примером сравнивается с рабочим конфигурационным файлом.
Полное совпадение означает отсутствие каких-либо изменений в Полное совпадение означает отсутствие каких-либо изменений в
рабочем файле со стороны пользователя, и следовательно этот файл рабочем файле со стороны пользователя, и следовательно этот
может быть безопасно удалён. Так как файл с примером всё ещё файл может быть безопасно удалён. Так как файл с примером всё
должен существовать для сравнения, строка <literal>@unexec</literal> ещё должен существовать для сравнения, строка
следует перед именем файла с примером конфигурации. На этапе <literal>@unexec</literal> следует перед именем файла с
установки, если рабочий файл конфигурации отсутствует, он примером конфигурации. На этапе установки, если рабочий файл
копируется из файла с примером. Файл с примером обязательно конфигурации отсутствует, он копируется из файла с примером.
должен быть установлен до операции копирования, поэтому строка Файл с примером обязательно должен быть установлен до операции
<literal>@exec</literal> следует после имени файла с примером копирования, поэтому строка <literal>@exec</literal> следует
конфигурации.</para> после имени файла с примером конфигурации.</para>
<para>Для получения дополнительного отладочного вывода на экран <para>Для получения дополнительного отладочного вывода на экран
можно временно удалить параметр <literal>-s</literal> из команды можно временно удалить параметр <literal>-s</literal> из
&man.cmp.1;.</para> команды &man.cmp.1;.</para>
<para>Для получения дополнительной инфорации по использованию <para>Для получения дополнительной инфорации по использованию
<literal>%D</literal> и прочих маркеров подстановки обратитесь <literal>%D</literal> и прочих маркеров подстановки обратитесь
к странице Справочника &man.pkg-create.8;.</para> к странице Справочника &man.pkg-create.8;.</para>
<para>Если существует действительно стоящая причина не устанавливать <para>Если существует действительно стоящая причина не
рабочий файл конфигурации по умолчанию, уберите строку устанавливать рабочий файл конфигурации по умолчанию, уберите
<literal>@exec</literal> из <filename>pkg-plist</filename> и строку <literal>@exec</literal> из
добавьте <link linkend="porting-message">сообщение</link>, <filename>pkg-plist</filename> и добавьте <link
указывающее на то, что пользователь обязан скопировать и linkend="porting-message">сообщение</link>, указывающее на
отредактировать этот файл перед тем, как программное обеспечение то, что пользователь обязан скопировать и отредактировать этот
начнёт работать.</para> файл перед тем, как программное обеспечение начнёт
работать.</para>
</sect1> </sect1>
<sect1 xml:id="plist-dynamic"> <sect1 xml:id="plist-dynamic">
<title>Динамический или статический список упаковки</title> <title>Динамический или статический список упаковки</title>
<para><emphasis>Статический список упаковки</emphasis> &mdash; это список <para><emphasis>Статический список упаковки</emphasis> &mdash;
упаковки, который доступен в Коллекции Портов или как файл это список упаковки, который доступен в Коллекции Портов или
<filename>pkg-plist</filename> (с подстановкой переменных или без как файл <filename>pkg-plist</filename> (с подстановкой
неё), или как встроенный в <filename>Makefile</filename> посредством переменных или без неё), или как встроенный в
<varname>PLIST_FILES</varname>, <varname>PLIST_DIRS</varname> <filename>Makefile</filename> посредством
и <varname>PLIST_DIRSTRY</varname>. <varname>PLIST_FILES</varname>, <varname>PLIST_DIRS</varname> и
Даже если содержимое является автоматически порождаемым при помощи <varname>PLIST_DIRSTRY</varname>. Даже если содержимое
инструмента или в результате выполнения цели в Makefile является автоматически порождаемым при помощи инструмента или в
<emphasis>до</emphasis> включения в Коллекцию Портов коммиттером, результате выполнения цели в Makefile <emphasis>до</emphasis>
то список всё ещё будет считаться статическим, поскольку его включения в Коллекцию Портов коммиттером, то список всё ещё
можно узнать без необходимости скачивания или компиляции будет считаться статическим, поскольку его можно узнать без
дистрибутива.</para> необходимости скачивания или компиляции дистрибутива.</para>
<para><emphasis>Динамический список упаковки</emphasis> это список <para><emphasis>Динамический список упаковки</emphasis> это
упаковки, который получается во время компиляции порта и строится список упаковки, который получается во время компиляции порта и
на основе устанавливаемых файлов и каталогов. Узнать такой список строится на основе устанавливаемых файлов и каталогов. Узнать
невозможно до того, как исходный код портируемого приложения такой список невозможно до того, как исходный код портируемого
будет скачен и скомпилирован, или после запуска приложения будет скачен и скомпилирован, или после запуска
<literal>make clean</literal>.</para> <literal>make clean</literal>.</para>
<para>Хотя использование динамических список упаковки не запрещено, <para>Хотя использование динамических список упаковки не
сопровождающие должны использовать статические списки упаковки запрещено, сопровождающие должны использовать статические
везде, где это возможно, поскольку это позволяет пользователям списки упаковки везде, где это возможно, поскольку это
выполнять &man.grep.1; по доступным портам для обнаружения, например, позволяет пользователям выполнять &man.grep.1; по доступным
который порт устанавливает определенный файл. Динамические списки портам для обнаружения, например, который порт устанавливает
должны быть использованы в основном для сложных портов, для которых определенный файл. Динамические списки должны быть
использованы в основном для сложных портов, для которых
изменения в списке упаковки кардинальным образом основаны на изменения в списке упаковки кардинальным образом основаны на
необязательных возможностях порта (и, таким образом, делая необязательных возможностях порта (и, таким образом, делая
сопровождение статических списков упаковки невозможным), или портов, сопровождение статических списков упаковки невозможным), или
которые изменяют список упаковки на основе версии используемого портов, которые изменяют список упаковки на основе версии
им программного обеспечения (например, порты, которые порождают используемого им программного обеспечения (например, порты,
документы при помощи <application>Javadoc</application>).</para> которые порождают документы при помощи
<application>Javadoc</application>).</para>
</sect1> </sect1>
<sect1 xml:id="plist-autoplist"> <sect1 xml:id="plist-autoplist">
<title>Автоматическое создание списка упаковки</title> <title>Автоматическое создание списка упаковки</title>
<para>Первым делом убедитесь, что ваш порт практически полностью <para>Первым делом убедитесь, что ваш порт практически полностью
завершён и осталось создать только <filename>pkg-plist</filename>. завершён и осталось создать только
После этого вы можете запустить <command>make makeplist</command> <filename>pkg-plist</filename>. После этого вы можете
для автоматического создания <filename>pkg-plist</filename>. запустить <command>make makeplist</command> для автоматического
Содержимое этого файла должно быть дважды перепроверено.</para> создания <filename>pkg-plist</filename>. Содержимое этого
файла должно быть дважды перепроверено.</para>
<para>Пользовательские конфигурационные файлы должны быть удалены <para>Пользовательские конфигурационные файлы должны быть удалены
или быть установлены как или быть установлены как <filename>filename.sample</filename>.
<filename>filename.sample</filename>. Файл <filename>info/dir</filename> включать в список не нужно,
Файл <filename>info/dir</filename> включать в список не нужно, но но должны быть добавлены соответствующие строчки
должны быть добавлены соответствующие строчки <filename>install-info</filename>, так, как это описано в
<filename>install-info</filename>, так, как это описано в разделе о <link linkend="makefile-info">файлах в формате info</link>. Все разделе о <link
библиотеки, устанавливаемые портом, должны быть перечислены так, как linkend="makefile-info">файлах в формате info</link>. Все
это описано в разделе о <link linkend="porting-shlibs">динамических библиотеках</link>.</para> библиотеки, устанавливаемые портом, должны быть перечислены
так, как это описано в разделе о <link
linkend="porting-shlibs">динамических
библиотеках</link>.</para>
</sect1> </sect1>
</chapter> </chapter>

View file

@ -7,54 +7,59 @@
Original revision: r43840 Original revision: r43840
--> -->
<chapter xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="porting-dads"> <chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="porting-dads">
<title>Что делать нужно, и что делать нельзя</title> <title>Что делать нужно, и что делать нельзя</title>
<sect1 xml:id="dads-intro"> <sect1 xml:id="dads-intro">
<title>Введение</title> <title>Введение</title>
<para>Вот список часто встречающихся действий, которые нужно и которые <para>Вот список часто встречающихся действий, которые нужно и
нельзя делать во время процесса портирования. Проверьте которые нельзя делать во время процесса портирования.
порт по этому списку, и также проверьте порты в Проверьте порт по этому списку, и также проверьте порты в <link
<link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">базе xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">базе
сообщений PR</link>, которые присланы другими людьми. Присылайте сообщений PR</link>, которые присланы другими людьми.
любые комментарии о портах, которые вы проверили, так, как это описано Присылайте любые комментарии о портах, которые вы проверили,
в статье о <link xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL"> так, как это описано в статье о <link
Сообщениях об ошибках и общих замечаниях</link>. Проверка портов в xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">
базе сообщений PR позволит нам быстрее коммиттить их и удостовериться, Сообщениях об ошибках и общих замечаниях</link>. Проверка
что вы знаете, что делаете.</para> портов в базе сообщений PR позволит нам быстрее коммиттить их и
удостовериться, что вы знаете, что делаете.</para>
</sect1> </sect1>
<sect1 xml:id="porting-wrkdir"> <sect1 xml:id="porting-wrkdir">
<title><varname>WRKDIR</varname></title> <title><varname>WRKDIR</varname></title>
<para>Не пишите ничего в файлы вне каталога <varname>WRKDIR</varname>. <para>Не пишите ничего в файлы вне каталога
Каталог <varname>WRKDIR</varname> является единственным местом, <varname>WRKDIR</varname>. Каталог <varname>WRKDIR</varname>
которое гарантированно будет доступно для записи во время построения является единственным местом, которое гарантированно будет
порта (обратитесь к главе о <link xlink:href="&url.books.handbook;/ports-using.html#PORTS-CD">установке портов с доступно для записи во время построения порта (обратитесь к
CDROM</link> за главе об <link
примером построения портов из дерева, доступного только для чтения). xlink:href="&url.books.handbook;/ports-using.html#PORTS-CD">установке
Если вам нужно изменить какой-либо из файлов портов с CDROM</link> за примером построения портов из
<filename>pkg-*</filename>, сделайте это, дерева, доступного только для чтения). Если вам нужно изменить
<link linkend="porting-pkgfiles">переопределив переменную</link>, но не какой-либо из файлов <filename>pkg-*</filename>, сделайте это,
перезаписывая их.</para> <link linkend="porting-pkgfiles">переопределив
переменную</link>, но не перезаписывая их.</para>
</sect1> </sect1>
<sect1 xml:id="porting-wrkdirprefix"> <sect1 xml:id="porting-wrkdirprefix">
<title><varname>WRKDIRPREFIX</varname></title> <title><varname>WRKDIRPREFIX</varname></title>
<para>Добейтесь того, чтобы ваш порт принимал во внимание значение <para>Добейтесь того, чтобы ваш порт принимал во внимание
переменной <varname>WRKDIRPREFIX</varname>. Большинство портов об значение переменной <varname>WRKDIRPREFIX</varname>.
этом не заботятся. В частности, если вы обращаетесь к каталогу Большинство портов об этом не заботятся. В частности, если вы
<varname>WRKDIR</varname> другого порта, заметьте, что его правильным обращаетесь к каталогу <varname>WRKDIR</varname> другого порта,
местоположением является заметьте, что его правильным местоположением является
<filename>WRKDIRPREFIXPORTSDIR/subdir/name/work</filename> not <filename>PORTSDIR/subdir/work</filename> <filename>WRKDIRPREFIXPORTSDIR/subdir/name/work</filename>, а
или <filename>.CURDIR/../../subdir/name/work</filename> не <filename>PORTSDIR/subdir/work</filename> или
или что-то подобное.</para> <filename>.CURDIR/../../subdir/name/work</filename> мли что-то
подобное.</para>
<para>Кроме того, если вы сами задаете <varname>WRKDIR</varname>, то <para>Кроме того, если вы сами задаете <varname>WRKDIR</varname>,
должны поставить перед ним знак то должны поставить перед ним знак
<literal>&dollar;{WRKDIRPREFIX}&dollar;{.CURDIR}</literal>.</para> <literal>&dollar;{WRKDIRPREFIX}&dollar;{.CURDIR}</literal>.</para>
</sect1> </sect1>
@ -62,9 +67,9 @@
<title>Различение операционных систем и версий ОС</title> <title>Различение операционных систем и версий ОС</title>
<para>Вы можете встретиться с кодом, который требует модификаций <para>Вы можете встретиться с кодом, который требует модификаций
или условной компиляции в зависимости от того, с какой версией &os; или условной компиляции в зависимости от того, с какой версией
Unix он работает. Предпочтительным способом отделения кода для &os; Unix он работает. Предпочтительным способом отделения
версий &os; является использование макросов кода для версий &os; является использование макросов
<literal>__FreeBSD_version</literal> и <literal>__FreeBSD_version</literal> и
<literal>__FreeBSD__</literal>, определённых в <link <literal>__FreeBSD__</literal>, определённых в <link
xlink:href="http://svnweb.freebsd.org/base/head/sys/sys/param.h?view=markup">sys/param.h</link>. xlink:href="http://svnweb.freebsd.org/base/head/sys/sys/param.h?view=markup">sys/param.h</link>.
@ -72,10 +77,11 @@
<programlisting>#include &lt;sys/param.h&gt;</programlisting> <programlisting>#include &lt;sys/param.h&gt;</programlisting>
<para>в соответствующем месте файла <filename>.c</filename>. <para>в нужном месте файла <filename>.c</filename>.</para>
<literal>__FreeBSD__</literal> определён во всех версиях &os;
в качестве старшего номера версии системы. Например, в &os; <para><literal>__FreeBSD__</literal> определён во всех версиях
9.x <literal>__FreeBSD__</literal> определён со значением &os; в качестве старшего номера версии системы. Например, в
&os; 9.x <literal>__FreeBSD__</literal> определён со значением
<literal>9</literal>.</para> <literal>9</literal>.</para>
<programlisting>#if __FreeBSD__ &gt;= 9 <programlisting>#if __FreeBSD__ &gt;= 9
@ -90,22 +96,22 @@
<filename>bsd.port.mk</filename></title> <filename>bsd.port.mk</filename></title>
<para>Не пишите ничего после строки <para>Не пишите ничего после строки
<literal>.include &lt;bsd.port.mk&gt;</literal>. Этой строки можно <literal>.include &lt;bsd.port.mk&gt;</literal>. Этой строки
избежать, включив в где-то в середину вашего файла можно избежать, включив в где-то в середину вашего файла
<filename>Makefile</filename> файл <filename>Makefile</filename> файл
<filename>bsd.port.pre.mk</filename>, и <filename>bsd.port.pre.mk</filename>, и файл
файл <filename>bsd.port.post.mk</filename> в конец.</para> <filename>bsd.port.post.mk</filename> в конец.</para>
<note> <note>
<para>Вам нужно включить либо пару файлов <para>Вам нужно включить либо пару файлов
<filename>bsd.port.pre.mk</filename>/<filename>bsd.port.post.mk</filename>, <filename>bsd.port.pre.mk</filename>/<filename>bsd.port.post.mk</filename>,
либо только <filename>bsd.port.mk</filename>; не используйте оба этих либо только <filename>bsd.port.mk</filename>; не используйте
метода одновременно.</para> оба этих метода одновременно.</para>
</note> </note>
<para>В файле <filename>bsd.port.pre.mk</filename> определяются лишь <para>В файле <filename>bsd.port.pre.mk</filename> определяются
несколько переменных, которые могут быть использованы в тестах из лишь несколько переменных, которые могут быть использованы в
файла <filename>Makefile</filename>, в файле тестах из файла <filename>Makefile</filename>, в файле
<filename>bsd.port.post.mk</filename> заданы остальные.</para> <filename>bsd.port.post.mk</filename> заданы остальные.</para>
<para>Вот некоторые важные переменные, определенные в файле <para>Вот некоторые важные переменные, определенные в файле
@ -140,13 +146,14 @@
<row> <row>
<entry><varname>OSREL</varname></entry> <entry><varname>OSREL</varname></entry>
<entry>Версия релиза операционной системы (например, <entry>Версия релиза операционной системы (например,
<literal>2.1.5</literal> или <literal>2.2.7</literal>)</entry> <literal>2.1.5</literal> или
<literal>2.2.7</literal>)</entry>
</row> </row>
<row> <row>
<entry><varname>OSVERSION</varname></entry> <entry><varname>OSVERSION</varname></entry>
<entry>Версия операционной системы в виде числа, та же,
<entry>Версия операционной системы в виде числа, та же, что и <link linkend="freebsd-versions"> что и <link linkend="freebsd-versions">
<literal>__FreeBSD_version</literal></link>.</entry> <literal>__FreeBSD_version</literal></link>.</entry>
</row> </row>
@ -158,17 +165,18 @@
<row> <row>
<entry><varname>PREFIX</varname></entry> <entry><varname>PREFIX</varname></entry>
<entry>Куда, собственно, устанавливается порт (обратитесь к <link linkend="porting-prefix"> <entry>Куда, собственно, устанавливается порт (обратитесь
подробной информации о <varname>PREFIX</varname></link>).</entry> к <link linkend="porting-prefix">подробной информации о
<varname>PREFIX</varname></link>).</entry>
</row> </row>
</tbody> </tbody>
</tgroup> </tgroup>
</informaltable> </informaltable>
<note> <note>
<para>Если вы задаете переменную <para>Если вы задаете переменную <varname>MASTERDIR</varname>,
<varname>MASTERDIR</varname>, делайте это до делайте это до подключения
подключения <filename>bsd.port.pre.mk</filename>.</para> <filename>bsd.port.pre.mk</filename>.</para>
</note> </note>
<para>Вот несколько примеров того, что вы можете написать после <para>Вот несколько примеров того, что вы можете написать после
@ -180,50 +188,52 @@ BROKEN= perl is in system
.endif</programlisting> .endif</programlisting>
<para>Вы не забываете об использовании табуляции вместо пробелов <para>Вы не забываете об использовании табуляции вместо пробелов
после <literal>BROKEN=</literal>, после <literal>BROKEN=</literal><!-- улыбка -->:-).</para>
не так ли? <!-- улыбка -->:-).</para>
</sect1> </sect1>
<sect1 xml:id="dads-sh-exec"> <sect1 xml:id="dads-sh-exec">
<title>Использование выражения <function>exec</function> <title>Использование выражения <function>exec</function>
в сценариях обёртках</title> в сценариях обёртках</title>
<para>Если порт устанавливает сценарий на языке shell, который служит <para>Если порт устанавливает сценарий на языке shell, который
для запуска другой программы, и если запуск этой программы является служит для запуска другой программы, и если запуск этой
последним действием сценария, убедитесь, что запуск программы программы является последним действием сценария, убедитесь, что
производится с использованием выражения <function>exec</function>, запуск программы производится с использованием выражения
например:</para> <function>exec</function>, например:</para>
<programlisting>#!/bin/sh <programlisting>#!/bin/sh
exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting> exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
<para>Выражение <function>exec</function> заменяет процесс сценария <para>Выражение <function>exec</function> заменяет процесс
на указанную программу. Если <function>exec</function> опущен, сценария на указанную программу. Если
то процесс сценария во время работы программы остается в памяти, <function>exec</function> опущен, то процесс сценария во время
без бесполезно потребляя системные ресурсы.</para> работы программы остается в памяти, бесполезно потребляя
системные ресурсы.</para>
</sect1> </sect1>
<sect1 xml:id="dads-rational"> <sect1 xml:id="dads-rational">
<title>Поступайте разумно</title> <title>Поступайте разумно</title>
<para>Файл <filename>Makefile</filename> должен выполнять действия <para>Файл <filename>Makefile</filename> должен выполнять
просто и небеспричинно. Если вы можете сделать что-то на несколько действия просто и небеспричинно. Если вы можете сделать что-то
строк короче или более читабельно, сделайте это. В качестве примеров на несколько строк короче или более читабельно, сделайте это.
можно привести использование конструкций <literal>.if</literal> В качестве примеров можно привести использование конструкций
утилиты make вместо соответствующей конструкции <literal>if</literal> <literal>.if</literal> утилиты make вместо соответствующей
командного процессора, ненужность переопределения цели конструкции <literal>if</literal> командного процессора,
<buildtarget>do-extract</buildtarget> при возможности переопределения ненужность переопределения цели
<varname>EXTRACT*</varname> и использование <buildtarget>do-extract</buildtarget> при возможности
переопределения <varname>EXTRACT*</varname> и использование
<varname>GNU_CONFIGURE</varname> вместо <varname>GNU_CONFIGURE</varname> вместо
<literal>CONFIGURE_ARGS+= --prefix=&dollar;{PREFIX}</literal>.</para> <literal>CONFIGURE_ARGS
+= --prefix=&dollar;{PREFIX}</literal>.</para>
<para>Если вы обнаружите, что для выполнения чего-то приходится писать <para>Если вы обнаружите, что для выполнения чего-то приходится
много нового кода, то, пожалуйста, просмотрите файл писать много нового кода, то, пожалуйста, просмотрите файл
<filename>bsd.port.mk</filename> на предмет того, не содержит ли он <filename>bsd.port.mk</filename> на предмет того, не содержит
реализацию именно вашей проблемы. Хотя его трудно читать, имеется ли он решение именно вашей проблемы. Хотя его трудно читать,
много проблем, выглядящих сложными, для которых файл имеется много проблем, выглядящих сложными, для которых файл
<filename>bsd.port.mk</filename> уже содержит быстрое решение.</para> <filename>bsd.port.mk</filename> уже содержит быстрое
решение.</para>
</sect1> </sect1>
<sect1 xml:id="dads-cc"> <sect1 xml:id="dads-cc">
@ -231,8 +241,8 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
<varname>CXX</varname></title> <varname>CXX</varname></title>
<para>Порт должен принимать во внимание как переменную <para>Порт должен принимать во внимание как переменную
<varname>CC</varname>, так и <varname>CXX</varname>. <varname>CC</varname>, так и <varname>CXX</varname>. Под этим
Под этим мы подразумеваем, что порт ни в коем случае не должен мы подразумеваем, что порт ни в коем случае не должен
устанавливать значения этих переменных, переопределяя имеющиеся устанавливать значения этих переменных, переопределяя имеющиеся
значения; вместо этого можно добавлять нужные значения к уже значения; вместо этого можно добавлять нужные значения к уже
имеющимся. Это связано с тем, что параметры построения, имеющимся. Это связано с тем, что параметры построения,
@ -244,14 +254,14 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
<para>Далее следует пример файла <filename>Makefile</filename>, <para>Далее следует пример файла <filename>Makefile</filename>,
использующего как переменную <varname>CC</varname>, так и использующего как переменную <varname>CC</varname>, так и
<varname>CXX</varname>. Обратите внимание на использование символов <varname>CXX</varname>. Обратите внимание на использование
<varname>?=</varname>:</para> символов <varname>?=</varname>:</para>
<programlisting>CC?= gcc</programlisting> <programlisting>CC?= gcc</programlisting>
<programlisting>CXX?= g++</programlisting> <programlisting>CXX?= g++</programlisting>
<para>Вот пример, в котором не принимаются во внимание ни переменная <para>Вот пример, в котором не принимаются во внимание ни
<varname>CC</varname>, ни <varname>CXX</varname>:</para> <varname>CC</varname>, ни <varname>CXX</varname>:</para>
<programlisting>CC= gcc</programlisting> <programlisting>CC= gcc</programlisting>
@ -262,18 +272,17 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
<varname>CXX</varname> могут быть определены в файле <varname>CXX</varname> могут быть определены в файле
<filename>/etc/make.conf</filename>. В первом примере задаётся <filename>/etc/make.conf</filename>. В первом примере задаётся
значение, если оно ранее не было определено в значение, если оно ранее не было определено в
<filename>/etc/make.conf</filename>, что сохраняет любые определения, <filename>/etc/make.conf</filename>, что сохраняет любые
данные на уровне системы в целом. Второй пример переопределяет всё, определения, данные на уровне системы в целом. Второй пример
что было задано ранее.</para> переопределяет всё, что было задано ранее.</para>
</sect1> </sect1>
<sect1 xml:id="dads-cflags"> <sect1 xml:id="dads-cflags">
<title>Использование <varname>CFLAGS</varname></title> <title>Использование <varname>CFLAGS</varname></title>
<para>Порт должен принимать во внимание переменную <para>Порт должен учитывать переменную <varname>CFLAGS</varname>.
<varname>CFLAGS</varname>.
Под этим мы подразумеваем, что порт ни в коем случае не должен Под этим мы подразумеваем, что порт ни в коем случае не должен
устанавливать значения этих переменных, переопределяя имеющиеся устанавливать значения этой переменной, переопределяя имеющиеся
значения; вместо этого можно добавлять нужные значения к уже значения; вместо этого можно добавлять нужные значения к уже
имеющимся. Это связано с тем, что параметры построения, имеющимся. Это связано с тем, что параметры построения,
относящиеся ко всем портам, могут быть заданы глобально.</para> относящиеся ко всем портам, могут быть заданы глобально.</para>
@ -286,35 +295,33 @@ exec %%LOCALBASE%%/bin/java -jar %%DATADIR%%/foo.jar "$@"</programlisting>
использующего переменную <varname>CFLAGS</varname>. Обратите использующего переменную <varname>CFLAGS</varname>. Обратите
внимание на использование символов <varname>+=</varname>:</para> внимание на использование символов <varname>+=</varname>:</para>
<programlisting> <programlisting>CFLAGS+= -Wall -Werror</programlisting>
CFLAGS+= -Wall -Werror
</programlisting>
<para>А вот пример, в котором не учитывается значение переменной <para>А вот пример, в котором не учитывается значение переменной
<varname>CFLAGS</varname>:</para> <varname>CFLAGS</varname>:</para>
<programlisting> <programlisting>CFLAGS= -Wall -Werror</programlisting>
CFLAGS= -Wall -Werror
</programlisting>
<para>В системе &os; переменная <varname>CFLAGS</varname> определена <para>В системе &os; переменная <varname>CFLAGS</varname>
в файле <filename>/etc/make.conf</filename>. В первом примере к определена в файле <filename>/etc/make.conf</filename>. В
переменной <varname>CFLAGS</varname> добавляются дополнительные флаги, первом примере к переменной <varname>CFLAGS</varname>
при этом сохраняются все определения, данные ранее на уровне системы. добавляются дополнительные флаги, при этом сохраняются все
Во втором примере всё, что было задано ранее, игнорируется.</para> определения, данные ранее на уровне системы. Во втором примере
всё, что было задано ранее, игнорируется.</para>
<para>Из сторонних файлов <filename>Makefile</filename> следует удалить <para>Из сторонних файлов <filename>Makefile</filename> следует
флаги оптимизации. Общесистемные флаги оптимизации находятся в удалить флаги оптимизации. Общесистемные флаги оптимизации
системной переменной <varname>CFLAGS</varname>. Пример из находятся в системной переменной <varname>CFLAGS</varname>.
немодифицированного <filename>Makefile</filename>:</para> Пример из немодифицированного
<filename>Makefile</filename>:</para>
<programlisting>CFLAGS= -O3 -funroll-loops -DHAVE_SOUND</programlisting> <programlisting>CFLAGS= -O3 -funroll-loops -DHAVE_SOUND</programlisting>
<para>При использовании системных флагов оптимизации <para>При использовании системных флагов оптимизации
<filename>Makefile</filename> станет похожим на следующий пример:</para> <filename>Makefile</filename> станет похожим на следующий
пример:</para>
<programlisting>CFLAGS+= -DHAVE_SOUND</programlisting> <programlisting>CFLAGS+= -DHAVE_SOUND</programlisting>
</sect1> </sect1>
<sect1 xml:id="dads-pthread"> <sect1 xml:id="dads-pthread">
@ -322,29 +329,28 @@ CFLAGS= -Wall -Werror
<para>Во &os; библиотека потоков обязана быть скомпонована с <para>Во &os; библиотека потоков обязана быть скомпонована с
исполняемыми файлами с использованием специального флага исполняемыми файлами с использованием специального флага
<literal>-pthread</literal>. Если порт настаивает <literal>-pthread</literal>. Если порт настаивает на прямой
на прямой компоновке с <literal>-lpthread</literal>, компоновке с <literal>-lpthread</literal>, создайте патч для
создайте патч для использования <literal>-pthread</literal> использования <literal>-pthread</literal>.</para>
</para>
<note> <note>
<para>Если построение порта заканчивается ошибкой <para>Если построение порта заканчивается ошибкой
<literal>unrecognized option '-pthread'</literal>, <literal>unrecognized option '-pthread'</literal>, то может
то может быть желательно использование <command>cc</command> быть желательно использование <command>cc</command> в
в качестве компоновщика через установку качестве компоновщика через установку
<varname>CONFIGURE_ENV</varname> в <literal>LD=${CC}</literal>. <varname>CONFIGURE_ENV</varname> в
Параметр <literal>-pthread</literal> напрямую командой <literal>LD=${CC}</literal>. Параметр
<literal>-pthread</literal> напрямую командой
<command>ld</command> не поддерживается.</para> <command>ld</command> не поддерживается.</para>
</note> </note>
</sect1> </sect1>
<sect1 xml:id="dads-feedback"> <sect1 xml:id="dads-feedback">
<title>Пожелания</title> <title>Пожелания</title>
<para>Посылайте подходящие изменения/патчи авторам/сопровождающему <para>Посылайте подходящие изменения/патчи автору/сопровождающему
для включения в следующий релиз. Это только сделает вашу работу для включения в следующий релиз. Это только сделает вашу
гораздо легче при выходе следующего релиза.</para> работу гораздо легче при выходе следующего релиза.</para>
</sect1> </sect1>
<sect1 xml:id="dads-readme"> <sect1 xml:id="dads-readme">
@ -356,47 +362,49 @@ CFLAGS= -Wall -Werror
<note> <note>
<para>Если не удается выполнить <command>make readme</command>, <para>Если не удается выполнить <command>make readme</command>,
убедитесь, что значение по умолчанию <varname>ECHO_MSG</varname> убедитесь, что значение по умолчанию
не было изменено внутри порта.</para> <varname>ECHO_MSG</varname> не изменено внутри порта.</para>
</note> </note>
</sect1> </sect1>
<sect1 xml:id="dads-noinstall"> <sect1 xml:id="dads-noinstall">
<title>Пометка неустанавливаемого порта как <varname>BROKEN</varname>, <title>Пометка неустанавливаемого порта как
<varname>FORBIDDEN</varname> или <varname>IGNORE</varname></title> <varname>BROKEN</varname>, <varname>FORBIDDEN</varname> или
<varname>IGNORE</varname></title>
<para>В некоторых случаях пользователи не должны допускаться к <para>В некоторых случаях пользователи не должны допускаться к
установке порта. Для того, чтобы сообщить пользователю, что порт установке порта. Для того, чтобы сообщить пользователю, что
не следует устанавливать, имеется несколько порт не следует устанавливать, имеется несколько
<command>make</command>-переменных, которые могут быть использованы <command>make</command>-переменных, которые могут быть
в файле <filename>Makefile</filename> порта. Значения следующих использованы в файле <filename>Makefile</filename> порта.
<command>make</command>-переменных будут причиной, возвращаемой Значения следующих <command>make</command>-переменных будут
пользователям, по которой порт отказывает в установке. причиной, возвращаемой пользователям, по которой порт
Пожалуйста, используйте корректные <command>make</command>-переменные, отказывает в установке. Пожалуйста, используйте корректные
так как каждая переменная make передает абсолютно различный смысл <command>make</command>-переменные, так как каждая переменная
как для пользователей, так и для автоматизированных систем, которые make передает абсолютно различный смысл как для пользователей,
полагаются на файлы <filename>Makefile</filename>, таких как так и для автоматизированных систем, которые полагаются на
<link linkend="build-cluster">кластер построения портов</link>, файлы <filename>Makefile</filename>, таких как <link
<link linkend="freshports">FreshPorts</link> и linkend="build-cluster">кластер построения портов</link>,
<link linkend="portsmon">portsmon</link>.</para> <link linkend="freshports">FreshPorts</link> и <link
linkend="portsmon">portsmon</link>.</para>
<sect2 xml:id="dads-noinstall-variables"> <sect2 xml:id="dads-noinstall-variables">
<title>Переменные</title> <title>Переменные</title>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para><varname>BROKEN</varname> предназначена для портов, которые <para><varname>BROKEN</varname> предназначена для портов,
в настоящее время не компилируются, не устанавливаются или не которые в настоящее время не компилируются, не
удаляются правильно. Следует использовать для портов, устанавливаются или не удаляются правильно. Следует
когда проблема считается временной.</para> использовать, когда проблема считается временной.</para>
<para>В особых случаях кластер <para>В особых случаях кластер построения будет продолжать
построения будет продолжать попытки собрать их, чтобы показать, попытки собрать их, чтобы показать, решена ли основная
решена ли основная проблема. (Однако, как правило, кластер проблема. (Однако, как правило, кластер запускается без
запускается без этой возможности.)</para> этой возможности.)</para>
<para>В частности, используйте <para>В частности, используйте <varname>BROKEN</varname>,
<varname>BROKEN</varname>, когда порт:</para> когда порт:</para>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
@ -414,40 +422,41 @@ CFLAGS= -Wall -Werror
</listitem> </listitem>
<listitem> <listitem>
<para>не удаляет полностью все свои файлы при деинсталляции <para>не удаляет полностью все свои файлы при
(тем не менее, это может быть допустимо, и подходит деинсталляции (тем не менее, это может быть
для портов, оставляющих после себя файлы, измененные допустимо, и подходит для портов, оставляющих после
пользователем)</para> себя файлы, измененные пользователем)</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</listitem> </listitem>
<listitem> <listitem>
<para><varname>FORBIDDEN</varname> используется для портов, которые <para><varname>FORBIDDEN</varname> используется для портов,
содержат уязвимости в информационной безопасности или которые содержат уязвимости в информационной безопасности
являются потенциально вредными в плане обеспечения информационной или являются потенциально вредными в плане обеспечения
безопасности системы &os; при установке данного порта информационной безопасности системы &os; при установке
(например: заведомо небезопасная программа или программа, которая данного порта (например: заведомо небезопасная программа
предоставляет легко взламываемые сервисы). Порты должны или программа, которая предоставляет легко взламываемые
помечаться как <varname>FORBIDDEN</varname>, как только в сервисы). Порты должны помечаться как
конкретном программном обеспечении обнаружилась уязвимость, но <varname>FORBIDDEN</varname>, как только в конкретном
обновление выпущено не было. В идеальном случае порты должны программном обеспечении обнаружилась уязвимость, но
обновляться максимально быстро после обнаружения уязвимости, обновление выпущено не было. В идеальном случае порты
чтобы уменьшить число уязвимых хостов &os; (нам нравится иметь должны обновляться максимально быстро после обнаружения
репутацию безопасной системы), однако иногда случается уязвимости, чтобы уменьшить число уязвимых хостов &os;
значительный временной разрыв между обнаружением уязвимости и (нам нравится иметь репутацию безопасной системы), однако
выходом обновлённого релиза уязвимого программного обеспечения. иногда случается значительный временной разрыв между
Не помечайте порт как <varname>FORBIDDEN</varname>, если причина обнаружением уязвимости и выходом обновлённого релиза
не вызвана соображениями информационной безопасности.</para> уязвимого программного обеспечения. Не помечайте порт
как <varname>FORBIDDEN</varname>, если причина не вызвана
соображениями информационной безопасности.</para>
</listitem> </listitem>
<listitem> <listitem>
<para><varname>IGNORE</varname> предназначена для портов, которые <para><varname>IGNORE</varname> предназначена для портов,
не должны строиться по какой-либо другой причине. Следует которые не должны строиться по какой-либо другой причине.
использовать для портов, в случае когда проблема считает Следует использовать для портов, в случае когда проблема
конструктивной. Кластер построения считается структурной. Кластер построения ни при каких
ни при каких условиях не будет строить порты, помеченные как условиях не будет строить порты, помеченные как
<varname>IGNORE</varname>. В частности, используйте <varname>IGNORE</varname>. В частности, используйте
<varname>IGNORE</varname>, когда порт:</para> <varname>IGNORE</varname>, когда порт:</para>
@ -461,34 +470,36 @@ CFLAGS= -Wall -Werror
</listitem> </listitem>
<listitem> <listitem>
<para>имеет distfile, который не может быть автоматически <para>имеет дистрибутивный файл, который не может быть
извлечен из-за лицензионных ограничений</para> автоматически извлечен из-за лицензионных
ограничений</para>
</listitem> </listitem>
<listitem> <listitem>
<para>не работает с каким-либо другим портом, установленным <para>не работает с каким-либо другим портом,
в настоящее время (например, порт зависит от установленным в настоящее время (например, порт
<package role="port">www/apache20</package>, но установлен зависит от <package
<package role="port">www/apache22</package>) role="port">www/apache20</package>, но установлен
</para> <package role="port">www/apache22</package>)</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
<note> <note>
<para>Если порт будет конфликтовать с уже установленным портом, <para>Если порт будет конфликтовать с уже установленным
(например, если они устанавливают файл в то же место, но портом (например, если они устанавливают файл в то же
с иным функциональным назначением), то место, но с иным функциональным назначением), то <link
<link linkend="conflicts">используйте linkend="conflicts">используйте вместо этого
вместо этого <varname>CONFLICTS</varname></link>. <varname>CONFLICTS</varname></link>.
<varname>CONFLICTS</varname> сам установит значение <varname>CONFLICTS</varname> сам установит значение
<varname>IGNORE</varname>.</para> <varname>IGNORE</varname>.</para>
</note> </note>
</listitem> </listitem>
<listitem> <listitem>
<para>Если порт нужно пометить как <varname>IGNORE</varname> <para>Если порт нужно пометить как
только на некоторых архитектурах, для этого есть две другие <varname>IGNORE</varname> только на некоторых
удобные переменные, которые автоматически установят для вас архитектурах, для этого есть две другие удобные
переменные, которые автоматически установят для вас
значения: <varname>ONLY_FOR_ARCHS</varname> и значения: <varname>ONLY_FOR_ARCHS</varname> и
<varname>NOT_FOR_ARCHS</varname>. Примеры:</para> <varname>NOT_FOR_ARCHS</varname>. Примеры:</para>
@ -496,34 +507,35 @@ CFLAGS= -Wall -Werror
<programlisting>NOT_FOR_ARCHS= ia64 sparc64</programlisting> <programlisting>NOT_FOR_ARCHS= ia64 sparc64</programlisting>
<para>Собственное сообщение <varname>IGNORE</varname> можно задать <para>Собственное сообщение <varname>IGNORE</varname> можно
с использованием <varname>ONLY_FOR_ARCHS_REASON</varname> и задать с использованием
<varname>NOT_FOR_ARCHS_REASON</varname>. Отдельно для каждой <varname>ONLY_FOR_ARCHS_REASON</varname> и
архитектуры это возможно с использованием <varname>NOT_FOR_ARCHS_REASON</varname>. Отдельно для
каждой архитектуры это возможно с использованием
<varname>ONLY_FOR_ARCHS_REASON_<replaceable>ARCH</replaceable></varname> <varname>ONLY_FOR_ARCHS_REASON_<replaceable>ARCH</replaceable></varname>
и и
<varname>NOT_FOR_ARCHS_REASON_<replaceable>ARCH</replaceable></varname>.</para> <varname>NOT_FOR_ARCHS_REASON_<replaceable>ARCH</replaceable></varname>.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Если порт загружает и устанавливает исполняемые файлы i386, <para>Если порт загружает и устанавливает исполняемые файлы
то следует установить <varname>IA32_BINARY_PORT</varname>. i386, то следует установить
Если эта переменная установлена, будет выполнена проверка <varname>IA32_BINARY_PORT</varname>. Если эта переменная
доступности каталога <filename>/usr/lib32</filename> для установлена, будет выполнена проверка доступности
библиотек версии IA32 и поддержки IA32 в ядре. При невыполнении каталога <filename>/usr/lib32</filename> для библиотек
версии IA32 и поддержки IA32 в ядре. При невыполнении
любого из этих условий будет автоматически установлена любого из этих условий будет автоматически установлена
переменная <varname>IGNORE</varname>.</para> переменная <varname>IGNORE</varname>.</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</sect2> </sect2>
<sect2 xml:id="dads-noinstall-notes"> <sect2 xml:id="dads-noinstall-notes">
<title>Замечания по реализации</title> <title>Замечания по реализации</title>
<para>Строки не следует брать в кавычки. <para>Строки не следует брать в кавычки. Также построение
Также построение строки должно несколько различаться из-за строки должно несколько различаться из-за способа отображения
способа отображения информации пользователю. Примеры:</para> информации пользователю. Примеры:</para>
<programlisting>BROKEN= fails to link with base -lcrypto</programlisting> <programlisting>BROKEN= fails to link with base -lcrypto</programlisting>
@ -545,48 +557,55 @@ CFLAGS= -Wall -Werror
<para>Помните, что <varname>BROKEN</varname> и <para>Помните, что <varname>BROKEN</varname> и
<varname>FORBIDDEN</varname> будут использованы как временное <varname>FORBIDDEN</varname> будут использованы как временное
средство, если порт не является работающим. Постоянно средство, если порт не является работающим. Постоянно
неработоспособные порты должны полностью удаляться из дерева.</para> неработоспособные порты должны полностью удаляться из
дерева.</para>
<para>В подходящих ситуациях пользователи могут быть оповещены о <para>В подходящих ситуациях пользователи могут быть оповещены о
предстоящем удалении через переменные <varname>DEPRECATED</varname> предстоящем удалении через переменные
и <varname>EXPIRATION_DATE</varname>. Первое - это просто строка, <varname>DEPRECATED</varname> и
сообщающая причину запланированного удаления порта; вторая является <varname>EXPIRATION_DATE</varname>. Первое - это просто
строкой в формате ISO 8601 (YYYY-MM-DD). Обе будут показаны строка, сообщающая причину запланированного удаления порта;
пользователю.</para> вторая является строкой в формате ISO 8601 (YYYY-MM-DD). Обе
будут показаны пользователю.</para>
<para>Переменную <varname>DEPRECATED</varname> можно установить без <para>Переменную <varname>DEPRECATED</varname> можно установить
использования <varname>EXPIRATION_DATE</varname> частности, при без использования <varname>EXPIRATION_DATE</varname>
рекомендации новой версии порта), но обратный порядок не имеет частности, при рекомендации новой версии порта), но обратный
никакого смысла.</para> порядок не имеет никакого смысла.</para>
<para>Не существует устоявшейся политики, как долго следует продолжать <para>Не существует устоявшейся политики, как долго следует
уведомления. Текущая практика дает около месяца для решения проблем продолжать уведомления. Текущая практика дает около месяца для
безопасности и два месяца для проблем построения. Это также дает решения проблем безопасности и два месяца для проблем
немного времени на исправление проблем любым заинтересованным построения. Это также дает немного времени на исправление
коммиттерам.</para> проблем любым заинтересованным коммиттерам.</para>
</sect1> </sect1>
<sect1 xml:id="dads-dot-error"> <sect1 xml:id="dads-dot-error">
<title>Избегайте использования конструкции <title>Избегайте использования конструкции
<literal>.error</literal></title> <literal>.error</literal></title>
<para>Правильным способом подать сигнал для <filename>Makefile</filename> <para>Правильным способом подать сигнал для
о том, что порт не может быть установлен из-за какого-то внешнего <filename>Makefile</filename> о том, что порт не может быть
фактора (например, пользователь указал недопустимую комбинацию установлен из-за какого-то внешнего фактора (например,
опций построения), является установка непустого значения для пользователь указал недопустимую комбинацию опций построения),
является установка непустого значения для
<varname>IGNORE</varname>. Это значение будет сформатировано и <varname>IGNORE</varname>. Это значение будет сформатировано и
показано пользователю во время <command>make install</command>.</para> показано пользователю во время
<command>make install</command>.</para>
<para>Использование для этих целей <literal>.error</literal> является <para>Использование для этих целей <literal>.error</literal>
распространенной ошибкой. Проблема в том, что в этой ситуации является распространенной ошибкой. Проблема в том, что в этой
будут повреждены многие инструменты автоматизации, работающие с ситуации будут повреждены многие инструменты автоматизации,
деревом портов. Наибольшим образом это распространено при попытке работающие с деревом портов. Наибольшим образом это
построить <filename>/usr/ports/INDEX</filename> (смотрите <xref linkend="make-describe"/>). Тем не менее, даже более простые команды, распространено при попытке построить
такие как <command>make maintainer</command>, в этом случае также <filename>/usr/ports/INDEX</filename> (смотрите <xref
вернут ошибку. Это не является приемлемым.</para> linkend="make-describe"/>). Тем не менее, даже более простые
команды, такие как <command>make maintainer</command>, в этом
случае также вернут ошибку. Это не является приемлемым.</para>
<example xml:id="dot-error-breaks-index"> <example xml:id="dot-error-breaks-index">
<title>Как избегать использование <literal>.error</literal></title> <title>Как избегать использования
<literal>.error</literal></title>
<para>Из следующих двух вариантов строки файла <para>Из следующих двух вариантов строки файла
<filename>Makefile</filename> первый приведёт к неудачному <filename>Makefile</filename> первый приведёт к неудачному
@ -603,14 +622,15 @@ CFLAGS= -Wall -Werror
<title>Использование <filename>sysctl</filename></title> <title>Использование <filename>sysctl</filename></title>
<para>Использование <filename>sysctl</filename> не рекомендуется, <para>Использование <filename>sysctl</filename> не рекомендуется,
кроме как при выполнении целей. Это вызвано тем, что вычисление кроме как при выполнении целей. Это вызвано тем, что
любых <literal>makevar</literal>, таких как во время команды вычисление любых <literal>makevar</literal>, таких как во время
<command>make index</command>, с необходимостью запуска этой команды <command>make index</command>, с необходимостью запуска
команды, еще больше замедляет весь процесс.</para> этой команды, еще больше замедляет весь процесс.</para>
<para>&man.sysctl.8; следует всегда использовать через переменную <para>&man.sysctl.8; следует всегда использовать через переменную
<varname>SYSCTL</varname>, поскольку она содержит полностью заданный <varname>SYSCTL</varname>, поскольку она содержит полностью
путь, и при необходимости может быть переопределена.</para> заданный путь, и при необходимости может быть
переопределена.</para>
</sect1> </sect1>
<sect1 xml:id="dads-rerolling-distfiles"> <sect1 xml:id="dads-rerolling-distfiles">
@ -619,19 +639,20 @@ CFLAGS= -Wall -Werror
<para>Иногда авторы программного обеспечения меняют содержимое <para>Иногда авторы программного обеспечения меняют содержимое
выпущенных дистрибутивных файлов без смены названия. Вы должны выпущенных дистрибутивных файлов без смены названия. Вы должны
проверять, что изменения являются официальными и произведены проверять, что изменения являются официальными и произведены
автором. В прошлом бывало, что дистрибутивный файл молча изменялся автором. В прошлом бывало, что дистрибутивный файл молча
на сайтах загрузки с намерением нанести вред или скомпрометировать изменялся на сайтах загрузки с намерением нанести вред или
безопасность конечного пользователя.</para> скомпрометировать безопасность конечного пользователя.</para>
<para>Отложите старый файл с дистрибутивом в сторону, загрузите новый, <para>Отложите старый файл с дистрибутивом в сторону, загрузите
распакуйте его и сравните содержимое при помощи &man.diff.1;. новый, распакуйте его и сравните содержимое при помощи
Если вы не видите ничего подозрительного, то можете обновить файл &man.diff.1;. Если вы не видите ничего подозрительного, то
<filename>distinfo</filename>. Убедитесь, что вы подытожили различия можете обновить файл <filename>distinfo</filename>. Убедитесь,
в вашем PR или описании коммита, чтобы другие люди были в курсе, что что вы подытожили различия в вашем PR или описании коммита,
вы позаботились о том, что ничего плохого не случилось.</para> чтобы другие люди были в курсе, что вы позаботились о том, что
ничего плохого не случилось.</para>
<para>Возможно вы также захотите связаться с автором этого программного <para>Возможно вы также захотите связаться с автором этого
обеспечения для подтверждения изменений.</para> программного обеспечения для подтверждения изменений.</para>
</sect1> </sect1>
<sect1 xml:id="dads-avoiding-linuxisms"> <sect1 xml:id="dads-avoiding-linuxisms">
@ -647,28 +668,30 @@ CFLAGS= -Wall -Werror
<acronym>POSIX</acronym>.</para> <acronym>POSIX</acronym>.</para>
<para>Не выполняйте запись временных меток в критических путях <para>Не выполняйте запись временных меток в критических путях
выполнения приложения, если можно обойтись без этого. Получение выполнения приложения, если можно обойтись без этого.
временных меток может быть медленным, в зависимости от степени Получение временных меток может быть медленным, в зависимости
точности используемых часов в операционной системе. Если от степени точности используемых часов в операционной системе.
временные метки действительно нужны, определите степень Если временные метки действительно нужны, определите степень
требуемой точности и используйте тот <acronym>API</acronym>, требуемой точности и используйте тот <acronym>API</acronym>,
в котором документируется получение достаточной точности.</para> в котором документируется получение достаточной
точности.</para>
<para>Ряд простых системных вызовов (например, &man.gettimeofday.2;, <para>Ряд простых системных вызовов (например,
&man.getpid.2;) работают намного быстрее в &linux; по сравнению &man.gettimeofday.2;, &man.getpid.2;) работают намного быстрее
с любой другой операционной системой из-за кеширования и в &linux; по сравнению с любой другой операционной системой
используемой оптимизации vsyscall. Не полагайтесь на их из-за кеширования и используемой оптимизации vsyscall. Не
дешевизну в критичных к производительности приложениях. В полагайтесь на их дешевизну в критичных к производительности
целом, старайтесь избегать системных вызовов там, где это приложениях. В целом, старайтесь избегать системных вызовов
возможно.</para> там, где это возможно.</para>
<para>Не полагайтесь на специфичное для &linux; поведение сокета. <para>Не полагайтесь на специфичное для &linux; поведение сокета.
В частности, отличаются размеры буфера сокета по умолчанию В частности, отличаются размеры буфера сокета по умолчанию
(выполните вызов &man.setsockopt.2; с <literal>SO_SNDBUF</literal> (выполните вызов &man.setsockopt.2; с
и <literal>SO_RCVBUF</literal>, и в то время как в &linux; <literal>SO_SNDBUF</literal> и <literal>SO_RCVBUF</literal>, и
при заполнении буфера сокета &man.send.2; блокируется, &os; в то время как в &linux; при заполнении буфера сокета
возвращает ошибку и устанавливает <literal>ENOBUFS</literal> &man.send.2; блокируется, &os; возвращает ошибку и
в качестве значения errno.</para> устанавливает <literal>ENOBUFS</literal> в качестве значения
errno.</para>
<para>Если требуется рассчитывать на нестандартное поведение, <para>Если требуется рассчитывать на нестандартное поведение,
инкапсулируйте это должным образом в общий для всех инкапсулируйте это должным образом в общий для всех
@ -676,7 +699,8 @@ CFLAGS= -Wall -Werror
конфигурации, и если требуемое поведение не найдено, конфигурации, и если требуемое поведение не найдено,
прекращайте выполнение.</para> прекращайте выполнение.</para>
<para>Используйте <link xlink:href="http://www.freebsd.org/cgi/man.cgi">страницы <para>Используйте <link
xlink:href="http://www.freebsd.org/cgi/man.cgi">страницы
справочника</link> для проверки, относится ли функция к справочника</link> для проверки, относится ли функция к
интерфейсу <acronym>POSIX</acronym> (ищите раздел интерфейсу <acronym>POSIX</acronym> (ищите раздел
<quote>STANDARDS</quote> на странице справочника).</para> <quote>STANDARDS</quote> на странице справочника).</para>
@ -688,13 +712,14 @@ CFLAGS= -Wall -Werror
<acronym>POSIX</acronym>-совместимой оболочке.</para> <acronym>POSIX</acronym>-совместимой оболочке.</para>
<para>Список основных <application>bash</application>-измов <para>Список основных <application>bash</application>-измов
расположен <link xlink:href="https://wiki.ubuntu.com/DashAsBinSh">здесь</link>.</para> расположен <link
xlink:href="https://wiki.ubuntu.com/DashAsBinSh">здесь</link>.</para>
<para>Проверьте, что используемые заголовочные файлы включены в <para>Проверьте, что используемые заголовочные файлы включены в
<acronym>POSIX</acronym> или список, рекомендуемый страницей <acronym>POSIX</acronym> или список, рекомендуемый страницей
справочника, т.к. например, забыть подключить справочника, т.к. например, забыть подключить
<filename>sys/types.h</filename> &mdash; не такая уж проблема <filename>sys/types.h</filename> &mdash; не такая уж проблема в
в &linux;, однако это не так во &os;.</para> &linux;, однако это не так во &os;.</para>
<para>Компилируйте многопоточные приложения с ключом <para>Компилируйте многопоточные приложения с ключом
<quote>-pthread</quote>, а не <quote>-lpthread</quote> или <quote>-pthread</quote>, а не <quote>-lpthread</quote> или
@ -705,16 +730,14 @@ CFLAGS= -Wall -Werror
<title>Разное</title> <title>Разное</title>
<para>Файлы <filename>pkg-descr</filename> и <para>Файлы <filename>pkg-descr</filename> и
<filename>pkg-plist</filename> должны проверяться дважды. Если вы <filename>pkg-plist</filename> должны проверяться дважды. Если
пересматриваете порт и думаете, что его можно описать иначе, вы пересматриваете порт и думаете, что его можно описать иначе,
сделайте это.</para> сделайте это.</para>
<para>Пожалуйста, не создавайте дополнительных копий лицензии GNU <para>Пожалуйста, не создавайте дополнительных копий лицензии GNU
General Public License в нашей системе.</para> General Public License в нашей системе.</para>
<para>Будьте внимательны с юридическими вопросами! Не делайте из нас <para>Будьте внимательны с юридическими вопросами! Не делайте из
нелегальных распространителей ПО!</para> нас нелегальных распространителей ПО!</para>
</sect1> </sect1>
</chapter> </chapter>

View file

@ -7,7 +7,9 @@
Original revision: r43840 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>
@ -16,10 +18,11 @@
дополнительные комментарии (те, которые в скобках)!</para> дополнительные комментарии (те, которые в скобках)!</para>
<para>Вам рекомендуется следовать этому формату (соблюдая порядок <para>Вам рекомендуется следовать этому формату (соблюдая порядок
следования переменных, пустые строки между разделами, и так далее). следования переменных, пустые строки между разделами, и так
Этот формат разработан для того, чтобы важная информация была легко далее). Этот формат разработан для того, чтобы важная информация
найдена. Мы рекомендуем вам воспользоваться утилитой <link linkend="porting-portlint">portlint</link> для проверки файла была легко найдена. Мы рекомендуем вам воспользоваться утилитой
<filename>Makefile</filename>.</para> <link linkend="porting-portlint">portlint</link> для проверки
файла <filename>Makefile</filename>.</para>
<programlisting>[заголовок...просто чтобы нам было легче идентифицировать порт.] <programlisting>[заголовок...просто чтобы нам было легче идентифицировать порт.]
# Created by: Satoshi Asami &lt;asami@FreeBSD.org&gt; # Created by: Satoshi Asami &lt;asami@FreeBSD.org&gt;
@ -104,7 +107,5 @@ pre-install:
[и, наконец, эпилог] [и, наконец, эпилог]
.include &lt;bsd.port.mk&gt; .include &lt;bsd.port.mk&gt;</programlisting>
</programlisting>
</chapter> </chapter>

View file

@ -7,19 +7,20 @@
Original revision: r43840 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; является способом, используемым <para>Коллекция портов &os; является способом, используемым
практически каждым для установки приложений ("портов") на &os;. практически каждым для установки приложений ("портов") на &os;.
Как и почти всё остальное во &os;, эта система в основном является Как и почти всё остальное во &os;, эта система в основном
добровольно поддерживаемым начинанием. Важно иметь это в виду при является добровольно поддерживаемым начинанием. Важно иметь это
чтении данного документа.</para> в виду при чтении данного документа.</para>
<para>Во &os; каждый может прислать новый порт либо изъявить желание <para>Во &os; каждый может прислать новый порт либо изъявить
поддерживать существующий порт, если его никто ещё никто не желание поддерживать существующий порт, если его никто ещё никто
поддерживает&mdash;вам не нужно иметь никаких особых привилегий на не поддерживает&mdash;вам не нужно иметь никаких особых
внесение изменений, чтобы это делать.</para> привилегий на внесение изменений, чтобы это делать.</para>
</chapter> </chapter>

View file

@ -7,24 +7,26 @@
Original revision: r43840 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-файл и поместите его в каталог <para>Во-первых, скачайте оригинальный tar-файл и поместите его в
<varname>DISTDIR</varname>, который по умолчанию есть не что иное, как каталог <varname>DISTDIR</varname>, который по умолчанию есть не
<filename>/usr/ports/distfiles</filename>.</para> что иное, как <filename>/usr/ports/distfiles</filename>.</para>
<note> <note>
<para>Здесь предполагается, что программное обеспечение компилируется <para>Здесь предполагается, что программное обеспечение
без проблем как есть, то есть для работы приложения на вашей системе компилируется без проблем как есть, то есть для работы
&os; не потребовалось абсолютно никаких изменений. Если приложения на вашей системе &os; не потребовалось абсолютно
требовалось что-то изменить, то вам придется обратиться также и к никаких изменений. Если требовалось что-то изменить, то вам
следующему разделу.</para> придется обратиться также и к следующему разделу.</para>
</note> </note>
<note> <note>
@ -34,8 +36,8 @@
<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>, <para>Эта настройка включает <quote>режим разработчика</quote>, в
в котором отображаются предупреждения при использовании котором отображаются предупреждения при использовании
устаревших конструкций и задействуются некоторые дополнительные устаревших конструкций и задействуются некоторые дополнительные
проверки при вызове команды <command>make</command>.</para> проверки при вызове команды <command>make</command>.</para>
</note> </note>
@ -59,65 +61,68 @@ COMMENT= Cat chasing a mouse all over the screen
.include &lt;bsd.port.mk&gt;</programlisting> .include &lt;bsd.port.mk&gt;</programlisting>
<note> <note>
<para>В некоторых случаях в заголовке <filename>Makefile</filename> <para>В некоторых случаях в заголовке
существующего порта могут содержаться дополнительные строки, <filename>Makefile</filename> существующего порта могут
такие как название порта и дата его создания. содержаться дополнительные строки, такие как название порта и
Эта дополнительная информация была объявлена устаревшей дата его создания. Эта дополнительная информация была
и находится в процессе удаления.</para> объявлена устаревшей и находится в процессе удаления.</para>
</note> </note>
<para>Посмотрим, сможете ли вы его понять. Не обращайте внимание на <para>Посмотрим, сможете ли вы его понять. Не обращайте внимание
содержимое строчки <literal>&dollar;FreeBSD&dollar;</literal>, она на содержимое строчки
будет заполнена автоматически системой <literal>&dollar;FreeBSD&dollar;</literal>, она будет заполнена
<application>Subversion</application>, когда порт будет автоматически системой <application>Subversion</application>,
импортирован в наше дерево портов. Вы можете найти более подробный когда порт будет импортирован в наше дерево портов. Вы можете
пример в разделе <link linkend="porting-samplem">пример найти более подробный пример в разделе <link
Makefile</link>.</para> linkend="porting-samplem">пример Makefile</link>.</para>
</sect1> </sect1>
<sect1 xml:id="porting-desc"> <sect1 xml:id="porting-desc">
<title>Создание информационных файлов</title> <title>Создание информационных файлов</title>
<para>Имеется два информационных файла, которые требуются для любого <para>Имеется два информационных файла, которые требуются для
порта, вне зависимости от того, является ли он пакетом или нет. Это любого порта, вне зависимости от того, является ли он пакетом
<filename>pkg-descr</filename> и <filename>pkg-plist</filename>. или нет. Это <filename>pkg-descr</filename> и
Префикс <filename>pkg-</filename> отличает их от других файлов.</para> <filename>pkg-plist</filename>. Префикс
<filename>pkg-</filename> отличает их от других файлов.</para>
<sect2> <sect2>
<title><filename>pkg-descr</filename></title> <title><filename>pkg-descr</filename></title>
<para>Это более подробное краткое описание порта. От одного до <para>Это более подробное краткое описание порта. От одного до
нескольких абзацев, кратко описывающих, что представляет собой нескольких абзацев, кратко описывающих, что представляет
порт, будет достаточно.</para> собой порт, будет достаточно.</para>
<note> <note>
<para>Это <emphasis>не</emphasis> руководство и не подробнейшее <para>Это <emphasis>не</emphasis> руководство и не
описание того, как использовать или компилировать порт! подробнейшее описание того, как использовать или
<emphasis>Пожалуйста, будьте внимательны при копировании текста компилировать порт! <emphasis>Пожалуйста, будьте
из <filename>README</filename> или страниц внимательны при копировании текста из
справочника</emphasis>; слишком часто они не являются кратким <filename>README</filename> или страниц справочника
описанием порта или имеют неудобный формат (например, страницы </emphasis>; слишком часто они не являются кратким
справочника выровнены пробелами, что особенно плохо описанием порта или имеют неудобный формат (например,
смотрится с моноширинными шрифтами).</para> страницы справочника выровнены пробелами, что особенно
плохо смотрится с моноширинными шрифтами).</para>
</note> </note>
<para>Хорошо составленный <filename>pkg-descr</filename> <para>Хорошо составленный <filename>pkg-descr</filename>
описывает порт достаточно полно, чтобы пользователю не описывает порт достаточно полно, чтобы пользователю не
приходилось сверяться с документацией или посещать вебсайт приходилось сверяться с документацией или посещать вебсайт
для понимания того, что делает данное программное обеспечение, для понимания того, что делает данное программное
чем оно может быть полезно или какие хорошие функции у него обеспечение, чем оно может быть полезно или какие хорошие
имеются. Упоминание про определённые требования, такие как функции у него имеются. Упоминание про определённые
используемый графический инструментарий, тяжёлые зависимости, требования, такие как используемый графический
окружение для запуска или используемый язык программирования инструментарий, тяжёлые зависимости, окружение для запуска
помогут пользователям определиться, будет ли этот порт для или используемый язык программирования помогут пользователям
них работать.</para> определиться, будет ли этот порт для них работать.</para>
<para>Включите сюда URL официальной домашней страницы Интернет. <para>Включите сюда URL официальной домашней страницы Интернет.
Перед <emphasis>одним</emphasis> из сайтов (выберите основной) Перед <emphasis>одним</emphasis> из сайтов (выберите
добавьте <literal>WWW:</literal> (с последующим единичным основной) добавьте <literal>WWW:</literal> (с последующим
пробелом) для того, чтобы вспомогательные утилиты работали единичным пробелом) для того, чтобы вспомогательные утилиты
правильно. Если URI является корнем сайта или каталогом, работали правильно. Если URI является корнем сайта или
то значение должно быть дополнено косой чертой.</para> каталогом, то значение должно быть дополнено косой
чертой.</para>
<note> <note>
<para>Если указанная для порта веб-страница не доступна, <para>Если указанная для порта веб-страница не доступна,
@ -139,14 +144,14 @@ WWW: http://www.oneko.org/</programlisting>
<sect2> <sect2>
<title><filename>pkg-plist</filename></title> <title><filename>pkg-plist</filename></title>
<para>Здесь перечисляются все файлы, устанавливаемые портом. Его <para>Здесь перечисляются все файлы, устанавливаемые портом.
также называют <quote>списком для упаковки</quote>, потому что Его также называют <quote>списком для упаковки</quote>,
пакет генерируется упаковкой файлов, которые здесь указаны. потому что пакет генерируется упаковкой файлов, которые здесь
Имена путей указываются относительно установочного префикса указаны. Имена путей указываются относительно установочного
(обычно <filename>/usr/local</filename>). префикса (обычно <filename>/usr/local</filename>). Если порт
Если порт во время установки создает каталоги, убедитесь, во время установки создает каталоги, убедитесь, что добавлены
что добавлены строки <literal>@dirrm</literal> для удаления строки <literal>@dirrm</literal> для удаления каталогов при
каталогов при удалении пакета.</para> удалении пакета.</para>
<para>Вот маленький пример:</para> <para>Вот маленький пример:</para>
@ -164,27 +169,30 @@ lib/X11/oneko/mouse.xpm
<note> <note>
<para>Рекомендуется, чтобы имена файлов в этом списке были <para>Рекомендуется, чтобы имена файлов в этом списке были
отсортированы в алфавитном порядке. Это позволит значительно отсортированы в алфавитном порядке. Это позволит
облегчить сверку изменений при обновлении порта.</para> значительно облегчить сверку изменений при обновлении
порта.</para>
</note> </note>
<note> <note>
<para>Создание списка упаковки вручную может оказаться весьма <para>Создание списка упаковки вручную может оказаться весьма
трудоёмкой задачей. Если порт устанавливает большое количество трудоёмкой задачей. Если порт устанавливает большое
файлов, раздел об <link linkend="plist-autoplist">автоматическом построении списка количество файлов, раздел об <link
упаковки</link> может помочь сэкономить время.</para> linkend="plist-autoplist">автоматическом построении
списка упаковки</link> может помочь сэкономить
время.</para>
</note> </note>
<para>Существует только одно исключение, когда у порта может <para>Существует только одно исключение, когда у порта может
отсутствовать <filename>pkg-plist</filename>. Если порт отсутствовать <filename>pkg-plist</filename>. Если порт
устанавливает лишь несколько файлов, а возможно, и каталогов, то устанавливает лишь несколько файлов, а возможно, и каталогов,
они могут быть перечислены в переменных то они могут быть перечислены в переменных
<varname>PLIST_FILES</varname> и <varname>PLIST_DIRS</varname>, <varname>PLIST_FILES</varname> и
соответственно, внутри файла <filename>Makefile</filename> порта. <varname>PLIST_DIRS</varname>, соответственно, внутри файла
К примеру, мы можем обойтись без файла <filename>Makefile</filename> порта. К примеру, мы можем
<filename>pkg-plist</filename> у приведённого выше порта обойтись без файла <filename>pkg-plist</filename> у
<filename>oneko</filename>, добавив следующие строки в приведённого выше порта <filename>oneko</filename>, добавив
<filename>Makefile</filename>:</para> следующие строки в <filename>Makefile</filename>:</para>
<programlisting>PLIST_FILES= bin/oneko \ <programlisting>PLIST_FILES= bin/oneko \
man/man1/oneko.1.gz \ man/man1/oneko.1.gz \
@ -194,8 +202,9 @@ lib/X11/oneko/mouse.xpm
lib/X11/oneko/mouse.xpm lib/X11/oneko/mouse.xpm
PLIST_DIRS= lib/X11/oneko</programlisting> PLIST_DIRS= lib/X11/oneko</programlisting>
<para>Конечно, переменная <varname>PLIST_DIRS</varname> не должна <para>Конечно, переменная <varname>PLIST_DIRS</varname> не
задаваться, если порт не устанавливает никаких каталогов.</para> должна задаваться, если порт не устанавливает никаких
каталогов.</para>
<note> <note>
<para>Несколько портов могут совместно использовать общий <para>Несколько портов могут совместно использовать общий
@ -204,24 +213,24 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
чтобы каталог удалялся только если он пуст, а иначе чтобы каталог удалялся только если он пуст, а иначе
игнорировался. Использование <varname>PLIST_DIRS</varname> игнорировался. Использование <varname>PLIST_DIRS</varname>
и <varname>PLIST_DIRSTRY</varname> аналогично и <varname>PLIST_DIRSTRY</varname> аналогично
<literal>@dirrm</literal> и <literal>@dirrmtry</literal> <literal>@dirrm</literal> и <literal>@dirrmtry</literal> в
в <filename>pkg-plist</filename>, описание которых <filename>pkg-plist</filename>, описание которых входит в
входит в <xref linkend="plist-dir-cleaning"/>.</para> <xref linkend="plist-dir-cleaning"/>.</para>
</note> </note>
<para>Обратной стороной такого способа перечисления файлов и <para>Обратной стороной такого способа перечисления файлов и
каталогов порта является невозможность использования каталогов порта является невозможность использования
последовательностей команд, описанных в &man.pkg-create.8;. последовательностей команд, описанных в &man.pkg-create.8;.
Поэтому он подходит для простых портов, что делает их ещё более Поэтому он подходит для простых портов, что делает их ещё
простыми. Одновременно с этим положительным моментом является более простыми. Одновременно с этим положительным моментом
уменьшение количества файлов в коллекции портов. Пожалуйста, является уменьшение количества файлов в коллекции портов.
подумайте над использованием этой техники, прежде чем создавать Пожалуйста, подумайте над использованием этой техники, прежде
<filename>pkg-plist</filename>.</para> чем создавать <filename>pkg-plist</filename>.</para>
<para>Далее мы увидим, как можно использовать файлы <para>Далее мы увидим, как можно использовать файлы
<filename>pkg-plist</filename> и <varname>PLIST_FILES</varname> <filename>pkg-plist</filename> и
выполнения <link linkend="plist">более сложных <varname>PLIST_FILES</varname> выполнения <link
задач</link>.</para> linkend="plist">более сложных задач</link>.</para>
</sect2> </sect2>
</sect1> </sect1>
@ -233,37 +242,37 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<filename>distinfo</filename>.</para> <filename>distinfo</filename>.</para>
<para>Если у извлекаемого файла регулярно меняется контрольная <para>Если у извлекаемого файла регулярно меняется контрольная
сумма и вы не сомневаетесь в надежности источника (т.е. он получен сумма и вы не сомневаетесь в надежности источника (т.е. он
из CD производителя, либо ежедневно обновляется документация), то вы получен из CD производителя, либо ежедневно обновляется
должны указать эти файлы в переменной <varname>IGNOREFILES</varname>. документация), то вы должны указать эти файлы в переменной
Тогда контрольная сумма при выполнении <command>make makesum</command> <varname>IGNOREFILES</varname>. Тогда контрольная сумма при
для этого файла создаваться не будет, а вместо этого для него будет выполнении <command>make makesum</command> для этого файла
установлено значение <literal>IGNORE</literal>.</para> создаваться не будет, а вместо этого для него будет установлено
значение <literal>IGNORE</literal>.</para>
</sect1> </sect1>
<sect1 xml:id="porting-testing"> <sect1 xml:id="porting-testing">
<title>Тестирование порта</title> <title>Тестирование порта</title>
<para>Вы должны удостовериться, что правила построения порта выполняют <para>Вы должны удостовериться, что правила построения порта
именно то, что вы хотите, включая создание пакета для порта. Вот выполняют именно то, что вы хотите, включая создание пакета для
те важные вещи, которые вы должны проверить.</para> порта. Вот те важные вещи, которые вы должны проверить.</para>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para><filename>pkg-plist</filename> не содержит ничего сверх того, <para><filename>pkg-plist</filename> не содержит ничего сверх
того, что устанавливается портом</para>
</listitem>
<listitem>
<para><filename>pkg-plist</filename> содержит абсолютно все,
что устанавливается портом</para> что устанавливается портом</para>
</listitem> </listitem>
<listitem> <listitem>
<para><filename>pkg-plist</filename> содержит абсолютно все, что <para>Порт может быть установлен с помощью указания цели
устанавливается портом</para> <buildtarget>install</buildtarget>. Это позволяет
</listitem> убедиться в правильной работе сценария установки.</para>
<listitem>
<para>Порт может быть установлен с помощью
указания цели <buildtarget>install</buildtarget>. Это
позволяет убедиться в правильной работе сценария
установки.</para>
</listitem> </listitem>
<listitem> <listitem>
@ -275,10 +284,11 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<listitem> <listitem>
<para>Следует убедиться, что <command>make package</command> <para>Следует убедиться, что <command>make package</command>
можно запустить из-под обычного пользователя (то есть, можно запустить из-под обычного пользователя (то есть, не
не из-под <systemitem class="username">root</systemitem>). из-под <systemitem class="username">root</systemitem>).
Если это не так, в <filename>Makefile</filename> порта Если это не так, в <filename>Makefile</filename> порта
должно быть добавлено <literal>NEED_ROOT=yes</literal>.</para> должно быть добавлено
<literal>NEED_ROOT=yes</literal>.</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
@ -319,9 +329,9 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
предупреждений.</para> предупреждений.</para>
<para>Основательное автоматизированное тестирование может быть <para>Основательное автоматизированное тестирование может быть
выполнено при помощи выполнено при помощи <package
<package role="port">ports-mgmt/tinderbox</package> или role="port">ports-mgmt/tinderbox</package> или <package
<package role="port">ports-mgmt/poudriere</package> из Коллекции role="port">ports-mgmt/poudriere</package> из Коллекции
Портов. Эти приложения используют <literal>jails</literal>, Портов. Эти приложения используют <literal>jails</literal>,
в которых проверяются все перечисленные выше этапы без в которых проверяются все перечисленные выше этапы без
изменения состояния основной системы.</para> изменения состояния основной системы.</para>
@ -331,25 +341,28 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<title>Проверка вашего порта утилитой <title>Проверка вашего порта утилитой
<command>portlint</command></title> <command>portlint</command></title>
<para>Будьте добры, пользуйтесь утилитой <command>portlint</command> <para>Будьте добры, пользуйтесь утилитой
для проверки того, что ваш порт соответствует нашим рекомендациям. <command>portlint</command> для проверки того, что ваш порт
Программа <package role="port">ports-mgmt/portlint</package> соответствует нашим рекомендациям. Программа <package
является частью Коллекции role="port">ports-mgmt/portlint</package> является частью
Портов. В частности, вы можете захотеть проверить, правильно ли Коллекции Портов. В частности, вы можете захотеть проверить,
сформирован файл <link linkend="porting-samplem">Makefile</link> и правильно ли сформирован файл <link
соответствующим ли образом именован <link linkend="porting-pkgname">пакет</link>.</para> linkend="porting-samplem">Makefile</link> и соответствующим
ли образом именован <link
linkend="porting-pkgname">пакет</link>.</para>
</sect1> </sect1>
<sect1 xml:id="porting-submitting"> <sect1 xml:id="porting-submitting">
<title>Посылка нового порта</title> <title>Посылка нового порта</title>
<para>Перед посылкой нового порта прочитайте раздел о том, что <para>Перед посылкой нового порта прочитайте раздел о том, что
<link linkend="porting-dads">можно и нельзя</link> делать.</para> <link linkend="porting-dads">можно и нельзя</link>
делать.</para>
<para>Когда вы наконец довольны своим первым портом, единственное, <para>Когда вы наконец довольны своим первым портом,
что осталось сделать, это включить его в основное дерево портов единственное, что осталось сделать, это включить его в основное
&os; и осчастливить этим всех остальных. Нам не нужен ни дерево портов &os; и осчастливить этим всех остальных. Нам не
каталог <filename>work</filename>, ни пакет нужен ни каталог <filename>work</filename>, ни пакет
<filename>pkgname.tgz</filename>, так что удалите их прямо <filename>pkgname.tgz</filename>, так что удалите их прямо
сейчас.</para> сейчас.</para>
@ -361,9 +374,9 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<para>Включите <filename>oneko.shar</filename> в сообщение об <para>Включите <filename>oneko.shar</filename> в сообщение об
ошибке и пошлите его с помощью &man.send-pr.1;. Обратитесь к ошибке и пошлите его с помощью &man.send-pr.1;. Обратитесь к
разделу <link разделу <link
xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL"> xlink:href="&url.articles.contributing;/contrib-how.html#CONTRIB-GENERAL">Сообщения
Сообщения об ошибках и общие замечания</link> для получения об ошибках и общие замечания</link> для получения подробной
подробной информации о &man.send-pr.1;).</para> информации о &man.send-pr.1;).</para>
<para>Укажите в сообщении категорию <literal>ports</literal> и <para>Укажите в сообщении категорию <literal>ports</literal> и
класс <literal>change-request</literal>. класс <literal>change-request</literal>.
@ -371,30 +384,31 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
<literal>confidential</literal>! Добавьте краткое описание <literal>confidential</literal>! Добавьте краткое описание
программы в поле <quote>Description</quote> отправляемого PR программы в поле <quote>Description</quote> отправляемого PR
(например, содержимое <varname>COMMENT</varname> в сокращённом (например, содержимое <varname>COMMENT</varname> в сокращённом
варианте) и сам файл в виде архива <filename>.shar</filename> варианте) и сам файл в виде архива <filename>.shar</filename> в
в поле <quote>Fix</quote>.</para> поле <quote>Fix</quote>.</para>
<note> <note>
<para>Хорошее описание в заголовке сообщения о проблеме <para>Хорошее описание в заголовке сообщения о проблеме
значительно облегчает работу коммиттеров портов. Для новых значительно облегчает работу коммиттеров портов. Для новых
портов мы предпочитаем нечто вроде <quote>New port: портов мы предпочитаем нечто вроде <quote>New port:
&lt;категория&gt;/&lt;название порта&gt; &lt;краткое &lt;категория&gt;/&lt;название порта&gt; &lt;краткое
описание порта&gt;</quote>. Следование этой схеме описание порта&gt;</quote>. Следование этой схеме упрощает
упрощает и ускоряет начало работы по добавлению нового и ускоряет начало работы по добавлению нового порта.</para>
порта.</para>
</note> </note>
<para>Повторим ещё раз, что <emphasis>не нужно включать ни оригинальный <para>Повторим ещё раз, что <emphasis>не нужно включать ни
файл с дистрибутивом, ни каталог <filename>work</filename>, оригинальный файл с дистрибутивом, ни каталог
ни пакет, построенный вами командой <filename>work</filename>, ни пакет, построенный вами
<command>make package</command></emphasis>; для новых портов командой <command>make package</command></emphasis>; для
используйте &man.shar.1;, но не &man.diff.1;.</para> новых портов используйте &man.shar.1;, но не
&man.diff.1;.</para>
<para>После отправки порта, пожалуйста, потерпите. Время, <para>После отправки порта, пожалуйста, потерпите. Время,
необходимое для включения нового порта во &os;, может занимать необходимое для включения нового порта во &os;, может занимать
от нескольких дней до нескольких месяцев. <link от нескольких дней до нескольких месяцев. <link
xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports"> xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?category=ports">
Здесь</link> можно увидеть список ожидающих PR для портов.</para> Здесь</link> можно увидеть список ожидающих PR для
портов.</para>
<para>После рассмотрения нового порта мы при необходимости вам <para>После рассмотрения нового порта мы при необходимости вам
ответим, а затем включим порт в наше дерево. Ваше имя также ответим, а затем включим порт в наше дерево. Ваше имя также
@ -404,4 +418,3 @@ PLIST_DIRS= lib/X11/oneko</programlisting>
файлы.</para> файлы.</para>
</sect1> </sect1>
</chapter> </chapter>

View file

@ -7,45 +7,49 @@
Original revision: r43840 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"> <sect1 xml:id="security-intro">
<title>Почему безопасность так важна</title> <title>Почему безопасность так важна</title>
<para>Ошибки в программном обеспечении появляются случайно. Возможно, <para>Ошибки в программном обеспечении появляются случайно.
самые опасные из них те, что создают уязвимости безопасности. С Возможно, самые опасные из них те, что создают уязвимости
технической точки зрения подобные уязвимости должны быть закрыты безопасности. С технической точки зрения подобные уязвимости
путем исправления вызывающих их ошибок. Тем не менее, политики должны быть закрыты путем исправления вызывающих их ошибок.
обработки несущественных ошибок и уязвимостей очень различаются. Тем не менее, политики обработки несущественных ошибок и
</para> уязвимостей очень различаются.</para>
<para>Обычная небольшая ошибка затрагивает только тех пользователей, <para>Обычная небольшая ошибка затрагивает только тех
которые задействуют некоторые комбинации настроек, активирующие эту пользователей, которые задействуют некоторые комбинации
ошибку. Разработчик в конечном счете выпустит патч, а зачтем новую настроек, активирующие эту ошибку. Разработчик в конечном
версию программного обеспечения, свободного от ошибки, но большинство счете выпустит патч, а зачтем новую версию программного
пользователей не посчитают нужным сразу же произвести обновление, обеспечения, свободного от ошибки, но большинство пользователей
поскольку эта ошибка никогда у них не проявлялась. Критическая не посчитают нужным сразу же произвести обновление, поскольку
ошибка, которая может приводить к потере данных, представляет эта ошибка никогда у них не проявлялась. Критическая ошибка,
серьезную проблему. Тем не менее, предусмотрительные пользователи которая может приводить к потере данных, представляет серьезную
знают, что большинство возможных происшествий, и среди них программные проблему. Тем не менее, предусмотрительные пользователи знают,
ошибки, скорее всего приводят к потере данных, поэтому они выполняют что большинство возможных происшествий, и среди них программные
резервное копирование важных данных; дополнительно, критическая ошибки, скорее всего приводят к потере данных, поэтому они
ошибка будет обнаружена очень скоро.</para> выполняют резервное копирование важных данных; дополнительно,
критическая ошибка будет обнаружена очень скоро.</para>
<para>С уязвимостью безопасности всё иначе. Во-первых, она может <para>С уязвимостью безопасности всё иначе. Во-первых, она может
сохраняться необнаруженной целые годы, потому что чаще всего не сохраняться необнаруженной целые годы, потому что чаще всего не
вызывает ошибок в работе. Во-вторых, компания злоумышленников вызывает ошибок в работе. Во-вторых, компания злоумышленников
может использовать ее для получения неавторизованного доступа к может использовать ее для получения неавторизованного доступа к
уязвимой системе, уничтожить или подменить важные данные; в худшем уязвимой системе, уничтожить или подменить важные данные; в
случае пользователь даже не заметит нанесенный урон. В-третьих, худшем случае пользователь даже не заметит нанесенный урон.
взлом уязвимой системы часто упрощает задачу проникновения атакующих В-третьих, взлом уязвимой системы часто упрощает задачу
в другие системы, которые не могут быть скомпрометированы иначе. проникновения атакующих в другие системы, которые не могут быть
Таким образом, устранение уязвимости как таковой недостаточно: скомпрометированы иначе. Таким образом, устранение уязвимости
следует разослать всем заинтересованным уведомления в наиболее как таковой недостаточно: следует разослать всем
понятной и исчерпывающей форме, что позволит оценить риск и заинтересованным уведомления в наиболее понятной и
предпринять подходящие меры.</para> исчерпывающей форме, что позволит оценить риск и предпринять
подходящие меры.</para>
</sect1> </sect1>
<sect1 xml:id="security-fix"> <sect1 xml:id="security-fix">
@ -54,37 +58,38 @@
<para>Что касается портов и пакетов, уязвимость безопасности <para>Что касается портов и пакетов, уязвимость безопасности
изначально может появиться в исходном дистрибутиве или файлах изначально может появиться в исходном дистрибутиве или файлах
порта. В первом случае, разработчик исходного программного порта. В первом случае, разработчик исходного программного
обеспечения скорее всего сразу же выпустит патч или новую версию, обеспечения скорее всего сразу же выпустит патч или новую
и вам лишь понадобится сразу обновить порт в соответствии с версию, и вам лишь понадобится сразу обновить порт в
исправлением автора. Если исправление по какой-то причине соответствии с исправлением автора. Если исправление по
задерживается, вам следует либо <link linkend="dads-noinstall">пометить какой-то причине задерживается, вам следует либо <link
порт как <varname>FORBIDDEN</varname></link>, либо добавить в порт linkend="dads-noinstall">пометить порт как
ваш собственный патч. В случае уязвимости порта просто исправьте <varname>FORBIDDEN</varname></link>, либо добавить в порт ваш
собственный патч. В случае уязвимости порта просто исправьте
этот порт как можно скорее. В любом случае нужно следовать этот порт как можно скорее. В любом случае нужно следовать
<link linkend="port-upgrading">стандартной процедуре отправки вашего <link linkend="port-upgrading">стандартной процедуре отправки
изменения</link>, если вы не обладаете правами на коммит изменения вашего изменения</link>, если вы не обладаете правами на
непосредственно в дерево портов.</para> коммит изменения непосредственно в дерево портов.</para>
<important> <important>
<para>Быть коммиттером портов недостаточно для коммита произвольного <para>Быть коммиттером портов недостаточно для коммита
порта. Помните, что обычно у портов есть сопровождающие, мнение произвольного порта. Помните, что обычно у портов есть
которых вы должны учитывать.</para> сопровождающие, мнение которых вы должны учитывать.</para>
</important> </important>
<para>Пожалуйста, убедитесь, что ревизия порта после закрытия <para>Пожалуйста, убедитесь, что ревизия порта после закрытия
уязвимости увеличена. Вот как пользователи, обновляющие уязвимости увеличена. Вот как пользователи, обновляющие
установленные пакеты на постоянной основе, увидят, что им нужно установленные пакеты на постоянной основе, увидят, что им нужно
запустить обновление. Кроме того, новый пакет будет собран и запустить обновление. Кроме того, новый пакет будет собран и
распространен через FTP и WWW зеркала, замещая уязвимый. распространен через FTP и WWW зеркала, замещая уязвимый. Если
Если в процессе исправления уязвимости не было изменено значение в процессе исправления уязвимости не было изменено значение
<varname>PORTVERSION</varname>, то должно быть увеличено значение <varname>PORTVERSION</varname>, то должно быть увеличено
<varname>PORTREVISION</varname>. Вам следует увеличить значение значение <varname>PORTREVISION</varname>. Вам следует
<varname>PORTREVISION</varname> после добавления в порт файла с увеличить значение <varname>PORTREVISION</varname> после
патчем, но не когда вы обновили порт до последней версии добавления в порт файла с патчем, но не когда вы обновили порт
программного обеспечения, попутно затронув при этом до последней версии программного обеспечения, попутно затронув
<varname>PORTVERSION</varname>. За дальнейшей информацией при этом <varname>PORTVERSION</varname>. За дальнейшей
обращайтесь к информацией обращайтесь к <link
<link linkend="makefile-naming-revepoch">соответствующему linkend="makefile-naming-revepoch">соответствующему
разделу</link>.</para> разделу</link>.</para>
</sect1> </sect1>
@ -94,66 +99,69 @@
<sect2 xml:id="security-notify-vuxml-db"> <sect2 xml:id="security-notify-vuxml-db">
<title>База данных VuXML</title> <title>База данных VuXML</title>
<para>Очень важным и первостепенным шагом при действии как можно <para>Очень важным и первостепенным шагом при действии как
раньше после раскрытия уязвимости является уведомление сообщества можно раньше после раскрытия уязвимости является уведомление
пользователей порта об опасности. Такие уведомления служат двум сообщества пользователей порта об опасности. Такие
целям. Во-первых, в случае действительно серьезной угрозы, будет уведомления служат двум целям. Во-первых, в случае
посоветовано применить мгновенное воздействие. Например, остановить действительно серьезной угрозы, будет посоветовано применить
затрагиваемый сетевой сервис или даже удалить порт целиком, мгновенное воздействие. Например, остановить затрагиваемый
пока уязвимость не будет устранена. Во-вторых, масса сетевой сервис или даже удалить порт целиком, пока уязвимость
пользователей имеет тенденцию обновлять установленные пакеты только от не будет устранена. Во-вторых, масса пользователей имеет
случая к случаю. Из уведомления они узнают, что тенденцию обновлять установленные пакеты только от случая к
<emphasis>должны</emphasis> обновить пакет без промедления сразу случаю. Из уведомления они узнают, что
же после появления исправленной версии.</para> <emphasis>должны</emphasis> обновить пакет без промедления
сразу же после появления исправленной версии.</para>
<para>Учитывая огромное число портов в дереве, невозможно по <para>Учитывая огромное число портов в дереве, невозможно по
каждому случаю выпускать бюллетень безопасности без создания каждому случаю выпускать бюллетень безопасности без создания
флуда и потери внимания сообщества к моменту появления флуда и потери внимания сообщества к моменту появления
действительно серьезных причин. Поэтому уязвимости безопасности, действительно серьезных причин. Поэтому уязвимости
обнаруженные в портах, записываются в безопасности, обнаруженные в портах, записываются в <link
<link xlink:href="http://vuxml.freebsd.org/">базу данных xlink:href="http://vuxml.freebsd.org/">базу данных &os;
&os; VuXML</link>. VuXML</link>. Члены Команды Офицеров Безопасности также
Члены Команды Офицеров Безопасности также отслеживают её на отслеживают её на предмет появления вопросов, требующих их
предмет появления вопросов, требующих их вмешательства.</para> вмешательства.</para>
<para>Если вы обладаете правами коммиттера, вы можете сам обновить <para>Если вы обладаете правами коммиттера, вы можете сам
базу данных VuXML. Так вы поможете Команде Офицеров Безопасности обновить базу данных VuXML. Так вы поможете Команде Офицеров
и своевременно пошлете ценную информацию сообществу. Тем не Безопасности и своевременно пошлете ценную информацию
менее, если вы не являетесь коммиттером или верите, что нашли сообществу. Тем не менее, если вы не являетесь коммиттером
исключительно серьезную уязвимость, то не или верите, что нашли исключительно серьезную уязвимость, то
задумываясь свяжитесь с Командой Офицеров Безопасности напрямую не задумываясь свяжитесь с Командой Офицеров Безопасности
как это описано на странице напрямую как это описано на странице <link
<link xlink:href="http://www.freebsd.org/security/#how">информационной xlink:href="http://www.freebsd.org/security/#how">информационной
безопасности &os;</link>.</para> безопасности &os;</link>.</para>
<para>База данных VuXML является документом <acronym>XML</acronym>. <para>База данных VuXML является документом
Его исходный файл <filename>vuln.xml</filename> содержится <acronym>XML</acronym>. Его исходный файл
прямо внутри порта <package role="port">security/vuxml</package>. <filename>vuln.xml</filename> содержится прямо внутри порта
<package role="port">security/vuxml</package>.
Следовательно, полное имя пути к файлу будет Следовательно, полное имя пути к файлу будет
<filename>PORTSDIR/security/vuxml/vuln.xml</filename>. <filename>PORTSDIR/security/vuxml/vuln.xml</filename>.
Каждый раз, при обнаружении вами в порте уязвимости безопасности Каждый раз, при обнаружении вами в порте уязвимости
добавьте об этом запись в этот файл. Пока вы не знакомы с VuXML, безопасности добавьте об этом запись в этот файл. Пока вы не
лучшее, что вы можете сделать, это найти существующую запись, знакомы с VuXML, лучшее, что вы можете сделать, это найти
подпадающую под ваш случай, затем скопировать ее и использовать существующую запись, подпадающую под ваш случай, затем
в качестве шаблона.</para> скопировать ее и использовать в качестве шаблона.</para>
</sect2> </sect2>
<sect2 xml:id="security-notify-vuxml-intro"> <sect2 xml:id="security-notify-vuxml-intro">
<title>Короткое вступление в VuXML</title> <title>Короткое вступление в VuXML</title>
<para>В совокупности <acronym>XML</acronym> является очень <para>В совокупности <acronym>XML</acronym> является очень
сложным форматом, и его описание выходит далеко за рамки сложным форматом, и его описание выходит далеко за рамки этой
этой книги. Тем не менее, для достижения основного понимания книги. Тем не менее, для достижения основного понимания
структуры записи VuXML вам понадобится всего лишь понять теги. структуры записи VuXML вам понадобится всего лишь понять
Имена тегов XML обрамляются в угловые скобки. Каждый открывающий теги. Имена тегов XML обрамляются в угловые скобки. Каждый
&lt;tag&gt; должен иметь совпадающий закрывающий &lt;/tag&gt;. открывающий &lt;tag&gt; должен иметь совпадающий закрывающий
Теги могут быть вложенными. При вложенности внутренние теги &lt;/tag&gt;. Теги могут быть вложенными. При вложенности
должны быть закрыты до закрытия внешних. Существует иерархия внутренние теги должны быть закрыты до закрытия внешних.
тегов, т.е. более сложные правила вкладывания тегов. Это Существует иерархия тегов, т.е. более сложные правила
похоже на HTML. Основное отличие в расширяемости XML, вкладывания тегов. Это похоже на HTML. Основное отличие в
т.е. в определении собственных тегов. Из-за своей характерной расширяемости XML, т.е. в определении собственных тегов.
структуры XML придает форму разрозненным данным. В частности, Из-за своей характерной структуры XML придает форму
XML подходит для разметки описаний уязвимостей безопасности.</para> разрозненным данным. В частности, XML подходит для разметки
описаний уязвимостей безопасности.</para>
<para>Теперь рассмотрим настоящую запись VuXML:</para> <para>Теперь рассмотрим настоящую запись VuXML:</para>
@ -207,17 +215,19 @@
&lt;/vuln&gt;</programlisting> &lt;/vuln&gt;</programlisting>
<para>Имена тегов должны быть самодокументируемыми, чтобы мы <para>Имена тегов должны быть самодокументируемыми, чтобы мы
сфокусировались только на полях, нужных нам для заполнения:</para> сфокусировались только на полях, нужных нам для
заполнения:</para>
<calloutlist> <calloutlist>
<callout arearefs="co-vx-vid"> <callout arearefs="co-vx-vid">
<para>Это тег верхнего уровня записи VuXML. У него есть <para>Это тег верхнего уровня записи VuXML. У него есть
обязательный атрибут <literal>vid</literal>, указывающий на обязательный атрибут <literal>vid</literal>, указывающий
универсальный уникальный идентификатор (UUID) для этой записи на универсальный уникальный идентификатор (UUID) для этой
(в кавычках). Вы должны формировать UUID для каждой новой записи (в кавычках). Вы должны формировать UUID для
записи VuXML (и не забудьте заменить ее для шаблона UUID, каждой новой записи VuXML (и не забудьте заменить ее для
если вы не пишете запись с нуля). Для получения VuXML UUID шаблона UUID, если вы не пишете запись с нуля). Для
вы можете использовать &man.uuidgen.1;.</para> получения VuXML UUID вы можете использовать
&man.uuidgen.1;.</para>
</callout> </callout>
<callout arearefs="co-vx-top"> <callout arearefs="co-vx-top">
@ -225,154 +235,165 @@
</callout> </callout>
<callout arearefs="co-vx-nam"> <callout arearefs="co-vx-nam">
<para>Здесь перечислены имена затронутых пакетов. <para>Здесь перечислены имена затронутых пакетов. Может
Может быть дано несколько имен, поскольку некоторые пакеты быть дано несколько имен, поскольку некоторые пакеты
могут быть основаны на одном главном порте или программном могут быть основаны на одном главном порте или
продукте. Сюда можно включить стабильную ветвь и ветвь программном продукте. Сюда можно включить стабильную
разработки, локализованные версии и подчиненные порты, ветвь и ветвь разработки, локализованные версии и
зависящие от различного выбора важных вариантов конфигурации, подчиненные порты, зависящие от различного выбора важных
указанных на этапе построения.</para> вариантов конфигурации, указанных на этапе
построения.</para>
<important> <important>
<para>Поиск всех подобных пакетов при написании записи VuXML <para>Поиск всех подобных пакетов при написании записи
входит в зону вашей ответственности. Имейте в виду, что VuXML входит в зону вашей ответственности. Имейте в
<literal>make search name=foo</literal> это ваш друг. виду, что <literal>make search name=foo</literal> это
Первичные точки для поиска следующие:</para> ваш друг. Первичные точки для поиска следующие:</para>
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para>вариант <filename>foo-devel</filename> для порта <para>вариант <filename>foo-devel</filename> для
<filename>foo</filename>;</para> порта <filename>foo</filename>;</para>
</listitem> </listitem>
<listitem> <listitem>
<para>другие варианты с суффиксами вида <para>другие варианты с суффиксами вида
<literal>-a4</literal> (для пакетов, связанных с печатью), <literal>-a4</literal> (для пакетов, связанных с
<literal>-without-gui</literal> (для пакетов с печатью), <literal>-without-gui</literal> (для
отключенной поддержкой X), или подобных;</para> пакетов с отключенной поддержкой X), или
подобных;</para>
</listitem> </listitem>
<listitem> <listitem>
<para><literal>jp-</literal>, <literal>ru-</literal>, <para><literal>jp-</literal>, <literal>ru-</literal>,
<literal>zh-</literal> и другие возможные локализованные <literal>zh-</literal> и другие возможные
варианты в соответствующих национальных категориях локализованные варианты в соответствующих
коллекции портов.</para> национальных категориях коллекции портов.</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>
</important> </important>
</callout> </callout>
<callout arearefs="co-vx-rng"> <callout arearefs="co-vx-rng">
<para>Здесь указаны затронутые версии пакета(-ов) как один или <para>Здесь указаны затронутые версии пакета(-ов) как один
более диапазонов с использованием комбинации элементов или более диапазонов с использованием комбинации
<literal>&lt;lt&gt;</literal>, <literal>&lt;le&gt;</literal>, элементов <literal>&lt;lt&gt;</literal>,
<literal>&lt;eq&gt;</literal>, <literal>&lt;ge&gt;</literal>, <literal>&lt;le&gt;</literal>,
и <literal>&lt;gt&gt;</literal>. Диапазоны внесённых версий <literal>&lt;eq&gt;</literal>,
не должны пересекаться.</para> <literal>&lt;ge&gt;</literal>, и
<literal>&lt;gt&gt;</literal>. Диапазоны внесённых
версий не должны пересекаться.</para>
<para>В спецификации диапазонов <literal>*</literal> (звёздочка) <para>В спецификации диапазонов <literal>*</literal>
означает наименьший номер версии. В частности, (звёздочка) означает наименьший номер версии. В
<literal>2.*</literal> меньше, чем <literal>2.a</literal>. частности, <literal>2.*</literal> меньше, чем
Поэтому звездочка может быть использована в диапазоне для <literal>2.a</literal>. Поэтому звездочка может быть
совпадения со всеми возможными <literal>alpha</literal>, использована в диапазоне для совпадения со всеми
возможными <literal>alpha</literal>,
<literal>beta</literal> и <literal>RC</literal> версиями. <literal>beta</literal> и <literal>RC</literal> версиями.
Как вариант, Как вариант,
<literal>&lt;ge&gt;2.*&lt;/ge&gt;&lt;lt&gt;3.*&lt;/lt&gt;</literal> <literal>&lt;ge&gt;2.*&lt;/ge&gt;&lt;lt&gt;3.*&lt;/lt&gt;</literal>
выборочно совпадет с версией <literal>2.x</literal>, а выборочно совпадет с версией <literal>2.x</literal>, а
<literal>&lt;ge&gt;2.0&lt;/ge&gt;&lt;lt&gt;3.0&lt;/lt&gt;</literal> <literal>&lt;ge&gt;2.0&lt;/ge&gt;&lt;lt&gt;3.0&lt;/lt&gt;</literal>
- нет, поскольку последнее не включает - нет, поскольку последнее не включает
<literal>2.r3</literal> и совпадает с <literal>3.b</literal>. <literal>2.r3</literal> и совпадает с
</para> <literal>3.b</literal>.</para>
<para>Пример выше указывает, что к затронутым относятся версии с <para>Пример выше указывает, что к затронутым относятся
<literal>1.6</literal> до <literal>1.9</literal> включительно, версии с <literal>1.6</literal> до <literal>1.9</literal>
версии <literal>2.x</literal> до <literal>2.4_1</literal> и включительно, версии <literal>2.x</literal> до
версия <literal>3.0b1</literal>.</para> <literal>2.4_1</literal> и версия
<literal>3.0b1</literal>.</para>
</callout> </callout>
<callout arearefs="co-vx-nm2"> <callout arearefs="co-vx-nm2">
<para>Некоторые связанные группы пакетов (в конечном счете, порты) <para>Некоторые связанные группы пакетов (в конечном счете,
могут быть указаны в разделе <literal>&lt;affected&gt;</literal>. порты) могут быть указаны в разделе
Это можно использовать, если некоторые программные продукты <literal>&lt;affected&gt;</literal>. Это можно
(скажем, FooBar, FreeBar and OpenBar) являются производными использовать, если некоторые программные продукты
от общей кодовой базы и всё еще совместно используют её ошибки (скажем, FooBar, FreeBar and OpenBar) являются
и уязвимости. Имейте в виду отличие от перечисления производными от общей кодовой базы и всё еще совместно
множественных имён в одном разделе &lt;package&gt;.</para> используют её ошибки и уязвимости. Имейте в виду отличие
от перечисления множественных имён в одном разделе
&lt;package&gt;.</para>
</callout> </callout>
<callout arearefs="co-vx-epo"> <callout arearefs="co-vx-epo">
<para>Диапазоны версий должны учитывать <para>Диапазоны версий должны учитывать
<varname>PORTEPOCH</varname> и <varname>PORTREVISION</varname>, <varname>PORTEPOCH</varname> и
если это применимо. Пожалуйста, помните, что в соответствии <varname>PORTREVISION</varname>, если это применимо.
с правилами сравнения строк версия с ненулевым значением Пожалуйста, помните, что в соответствии с правилами
сравнения строк версия с ненулевым значением
<varname>PORTEPOCH</varname> выше, чем любая версия без <varname>PORTEPOCH</varname> выше, чем любая версия без
<varname>PORTEPOCH</varname>, например, <literal>3.0,1</literal> <varname>PORTEPOCH</varname>, например,
выше, чем <literal>3.1</literal> или даже <literal>8.9</literal>. <literal>3.0,1</literal> выше, чем <literal>3.1</literal>
</para> или даже <literal>8.9</literal>.</para>
</callout> </callout>
<callout arearefs="co-vx-bdy"> <callout arearefs="co-vx-bdy">
<para>Сводная информация о проблеме. В этом поле <para>Сводная информация о проблеме. В этом поле
используется XHTML. По крайней мере, должны быть обрамляющие используется XHTML. По крайней мере, должны быть
<literal>&lt;p&gt;</literal> и <literal>&lt;/p&gt;</literal>. обрамляющие <literal>&lt;p&gt;</literal> и
Может быть использована более сложная разметка, но только в <literal>&lt;/p&gt;</literal>. Может быть использована
целях аккуратности и ясности: без эстетства, пожалуйста. более сложная разметка, но только в целях аккуратности и
</para> ясности: без эстетства, пожалуйста.</para>
</callout> </callout>
<callout arearefs="co-vx-ref"> <callout arearefs="co-vx-ref">
<para>Этот раздел содержит ссылки на имеющие отношение документы. <para>Этот раздел содержит ссылки на имеющие отношение
Приветствуется как можно большее количество ссылок.</para> документы. Приветствуется как можно большее количество
ссылок.</para>
</callout> </callout>
<callout arearefs="co-vx-fsa"> <callout arearefs="co-vx-fsa">
<para>Это <para>Это <link
<link xlink:href="http://www.freebsd.org/security/#adv">бюллетень xlink:href="http://www.freebsd.org/security/#adv">бюллетень
безопасности &os;</link>.</para> безопасности &os;</link>.</para>
</callout> </callout>
<callout arearefs="co-vx-fpr"> <callout arearefs="co-vx-fpr">
<para>Это <para>Это <link
<link xlink:href="http://www.freebsd.org/support.html#gnats">сообщение xlink:href="http://www.freebsd.org/support.html#gnats">сообщение
об ошибке &os;</link>.</para> об ошибке &os;</link>.</para>
</callout> </callout>
<callout arearefs="co-vx-cve"> <callout arearefs="co-vx-cve">
<para>Идентификатор <para>Идентификатор <link
<link xlink:href="http://www.cve.mitre.org/">MITRE xlink:href="http://www.cve.mitre.org/">MITRE
CVE</link>.</para> CVE</link>.</para>
</callout> </callout>
<callout arearefs="co-vx-bid"> <callout arearefs="co-vx-bid">
<para>Это <para>Это <link
<link xlink:href="http://www.securityfocus.com/bid">SecurityFocus xlink:href="http://www.securityfocus.com/bid">SecurityFocus
Bug ID</link>.</para> Bug ID</link>.</para>
</callout> </callout>
<callout arearefs="co-vx-cts"> <callout arearefs="co-vx-cts">
<para>Бюллетень безопасности <para>Бюллетень безопасности <link
<link xlink:href="http://www.cert.org/">US-CERT</link>.</para> xlink:href="http://www.cert.org/">US-CERT</link>.</para>
</callout> </callout>
<callout arearefs="co-vx-ctv"> <callout arearefs="co-vx-ctv">
<para>Примечание к уязвимости <para>Примечание к уязвимости <link
<link xlink:href="http://www.cert.org/">US-CERT</link>.</para> xlink:href="http://www.cert.org/">US-CERT</link>.</para>
</callout> </callout>
<callout arearefs="co-vx-ucs"> <callout arearefs="co-vx-ucs">
<para>Уведомление системы Cyber Security Alert <para>Уведомление системы Cyber Security Alert <link
<link xlink:href="http://www.cert.org/">US-CERT</link>.</para> xlink:href="http://www.cert.org/">US-CERT</link>.</para>
</callout> </callout>
<callout arearefs="co-vx-uct"> <callout arearefs="co-vx-uct">
<para>Уведомление системы Technical Cyber Security Alert <para>Уведомление системы Technical Cyber Security Alert
<link xlink:href="http://www.cert.org/">US-CERT</link>.</para> <link
xlink:href="http://www.cert.org/">US-CERT</link>.</para>
</callout> </callout>
<callout arearefs="co-vx-mls"> <callout arearefs="co-vx-mls">
<para>URL к архивному сообщению в списке рассылки. <para>URL к архивному сообщению в списке рассылки. Атрибут
Атрибут <literal>msgid</literal> является необязательным <literal>msgid</literal> является необязательным и может
и может указывать на message ID сообщения.</para> указывать на message ID сообщения.</para>
</callout> </callout>
<callout arearefs="co-vx-url"> <callout arearefs="co-vx-url">
@ -381,10 +402,11 @@
</callout> </callout>
<callout arearefs="co-vx-dsc"> <callout arearefs="co-vx-dsc">
<para>Дата последнего изменения любой информации данной записи <para>Дата последнего изменения любой информации данной
(<replaceable>YYYY-MM-DD</replaceable>). Новые записи не записи (<replaceable>YYYY-MM-DD</replaceable>). Новые
должны включать это поле. Поле должно быть добавлено после записи не должны включать это поле. Поле должно быть
редактирования существующей записи.</para> добавлено после редактирования существующей
записи.</para>
</callout> </callout>
</calloutlist> </calloutlist>
</sect2> </sect2>
@ -392,9 +414,10 @@
<sect2 xml:id="security-notify-vuxml-testing"> <sect2 xml:id="security-notify-vuxml-testing">
<title>Тестирование ваших изменений в базе данных VuXML</title> <title>Тестирование ваших изменений в базе данных VuXML</title>
<para>Предположим, что вы только что написали или заполнили запись <para>Предположим, что вы только что написали или заполнили
об уязвимости в пакете <literal>clamav</literal>, которая была запись об уязвимости в пакете <literal>clamav</literal>,
исправлена в версии <literal>0.65_7</literal>.</para> которая была исправлена в версии
<literal>0.65_7</literal>.</para>
<para>Прежде всего, вам нужно <emphasis>установить</emphasis> <para>Прежде всего, вам нужно <emphasis>установить</emphasis>
последние версии портов последние версии портов
@ -403,42 +426,44 @@
<package role="port">security/vuxml</package>.</para> <package role="port">security/vuxml</package>.</para>
<note> <note>
<para>Для запуска <command>packaudit</command> вы должны обладать <para>Для запуска <command>packaudit</command> вы должны
правами на запись в обладать правами на запись в
<filename>DATABASEDIR</filename>; как правило, <filename>DATABASEDIR</filename>; как правило, это
это <filename>/var/db/portaudit</filename>.</para> <filename>/var/db/portaudit</filename>.</para>
<para>Для использования другого каталога присвойте переменной <para>Для использования другого каталога присвойте переменной
окружения <filename>DATABASEDIR</filename> окружения <filename>DATABASEDIR</filename> другой
другой путь.</para> путь.</para>
<para>Если вы работаете в каталоге, отличном от <para>Если вы работаете в каталоге, отличном от
<filename>${PORTSDIR}/security/vuxml</filename>, присвойте <filename>${PORTSDIR}/security/vuxml</filename>, присвойте
переменной окружения переменной окружения <filename>VUXMLDIR</filename> путь к
<filename>VUXMLDIR</filename> путь к каталогу, каталогу, в котором находится
в котором находится <filename>vuln.xml</filename>.</para> <filename>vuln.xml</filename>.</para>
</note> </note>
<para>Во-первых, проверьте, нет ли уже записи об этой уязвимости. <para>Во-первых, проверьте, нет ли уже записи об этой
Если такая запись есть, она совпадёт с предыдущей версией уязвимости. Если такая запись есть, она совпадёт с
пакета <literal>0.65_6</literal>:</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> &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> &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> <note>
<para>Вам понадобится установить по крайней мере один из следующих <para>Вам понадобится установить по крайней мере один из
пакетов: <package role="port">textproc/libxml2</package>, следующих пакетов:
<package role="port">textproc/libxml2</package>,
<package role="port">textproc/jade</package>.</para> <package role="port">textproc/jade</package>.</para>
</note> </note>
@ -447,22 +472,22 @@
<screen>&prompt.user; <userinput>packaudit</userinput></screen> <screen>&prompt.user; <userinput>packaudit</userinput></screen>
<para>Чтобы убедиться, что раздел <literal>&lt;affected&gt;</literal> <para>Чтобы убедиться, что раздел
в вашей записи совпадает с правильными пакетами, выполните <literal>&lt;affected&gt;</literal> в вашей записи совпадает
следующую команду:</para> с правильными пакетами, выполните следующую команду:</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> <note>
<para>Для лучшего понимания синтаксиса этой команды обращайтесь <para>Для лучшего понимания синтаксиса этой команды
к &man.portaudit.1;.</para> обращайтесь к &man.portaudit.1;.</para>
</note> </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&lt;0.65_7) Affected package: clamav-0.65_6 (matched by clamav&lt;0.65_7)
@ -471,11 +496,10 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
1 problem(s) found.</screen> 1 problem(s) found.</screen>
<para>Первая версия должна совпасть, а последняя <para>Первая версия должна совпасть, а последняя нет.</para>
нет.</para>
<para>В заключение проверьте, что веб-страница, сформированная из <para>В заключение проверьте, что веб-страница, сформированная
базы данных VuXML, выглядит как положено:</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>packaudit</userinput>
@ -483,4 +507,3 @@ Reference: &lt;http://www.freebsd.org/ports/portaudit/74a9541d-5d6c-11d8-80e3-00
</sect2> </sect2>
</sect1> </sect1>
</chapter> </chapter>

View file

@ -7,83 +7,86 @@
Original revision: r43840 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"> <sect1 xml:id="slow-work">
<title>Как всё это работает</title> <title>Как всё это работает</title>
<para>Во-первых, когда пользователь дает в своем каталоге с портом <para>Во-первых, когда пользователь дает в своем каталоге с
команду <command>make</command>, происходит целая череда событий. портом команду <command>make</command>, происходит целая череда
Во время чтения этого текста может оказаться полезным иметь файл событий. Во время чтения этого текста может оказаться полезным
<filename>bsd.port.mk</filename> открытым в другом окне, что сильно иметь файл <filename>bsd.port.mk</filename> открытым в другом
поможет в их понимании.</para> окне, что сильно поможет в их понимании.</para>
<para>Но не волнуйтесь сильно, если вы не до конца понимаете, что <para>Но не волнуйтесь сильно, если вы не до конца понимаете, что
делается в <filename>bsd.port.mk</filename>, не так уж много людей делается в <filename>bsd.port.mk</filename>, не так уж много
его понимает... <!-- smiley --><emphasis>:-&gt;</emphasis></para> людей его понимает... <emphasis>:-&gt;</emphasis></para>
<procedure> <procedure>
<step> <step>
<para>Запускается цель <buildtarget>fetch</buildtarget>. Цель <para>Запускается цель <buildtarget>fetch</buildtarget>.
<buildtarget>fetch</buildtarget> отвечает за то, что архив исходных Цель <buildtarget>fetch</buildtarget> отвечает за то, что
текстов имеется в наличии локально в каталоге архив исходных текстов имеется в наличии локально в
<varname>DISTDIR</varname>. Если цель каталоге <varname>DISTDIR</varname>. Если цель
<buildtarget>fetch</buildtarget> не может найти требуемые файлы в <buildtarget>fetch</buildtarget> не может найти требуемые
каталоге <varname>DISTDIR</varname>, то они будут искаться по файлы в каталоге <varname>DISTDIR</varname>, то они будут
указателю URL <varname>MASTER_SITES</varname>, который искаться по указателю URL <varname>MASTER_SITES</varname>,
устанавливается в Makefile, а также на наших FTP зеркалах, который устанавливается в Makefile, а также на наших FTP
куда мы по возможности помещаем дистрибутивные файлы для архива. зеркалах, куда мы по возможности помещаем дистрибутивные
Затем она попытается сгрузить указанный файл с помощью файлы для архива. Затем она попытается сгрузить указанный
<varname>FETCH</varname>, полагая, что запрашивающая машина имеет файл с помощью <varname>FETCH</varname>, полагая, что
прямое подключение к Интернет. Если файл скачается удачно, то запрашивающая машина имеет прямое подключение к Интернет.
он будет помещен в каталог <varname>DISTDIR</varname> для Если файл скачается удачно, то он будет помещен в каталог
последующего использования и обработки.</para> <varname>DISTDIR</varname> для последующего использования и
обработки.</para>
</step> </step>
<step> <step>
<para>Выполняется цель <buildtarget>extract</buildtarget>. Она ищет <para>Выполняется цель <buildtarget>extract</buildtarget>.
дистрибутивный файл порта (как правило, tar-архив Она ищет дистрибутивный файл порта (как правило, tar-архив
<command>gzip</command>) в <command>gzip</command>) в каталоге
каталоге <varname>DISTDIR</varname> и распаковывает его во <varname>DISTDIR</varname> и распаковывает его во временный
временный каталог, задаваемый переменной каталог, задаваемый переменной <varname>WRKDIR</varname>
<varname>WRKDIR</varname> (по умолчанию (по умолчанию <filename>work</filename>).</para>
<filename>work</filename>).</para>
</step> </step>
<step> <step>
<para>Выполняется цель <buildtarget>patch</buildtarget>. Во-первых, <para>Выполняется цель <buildtarget>patch</buildtarget>.
применяются все патчи, заданные переменной Во-первых, применяются все патчи, заданные переменной
<varname>PATCHFILES</varname>. Во-вторых, если какие-либо файлы с <varname>PATCHFILES</varname>. Во-вторых, если какие-либо
патчами, носящие имена файлы с патчами, носящие имена
<filename>patch-*</filename>, имеются в <filename>patch-*</filename>, имеются в подкаталоге
подкаталоге <varname>PATCHDIR</varname> (по умолчанию это каталог <varname>PATCHDIR</varname> (по умолчанию это каталог
<filename>files</filename>), то они применяются в этот момент в <filename>files</filename>), то они применяются в этот
алфавитном порядке.</para> момент в алфавитном порядке.</para>
</step> </step>
<step> <step>
<para>Запускается цель <buildtarget>configure</buildtarget>. Здесь <para>Запускается цель <buildtarget>configure</buildtarget>.
может выполняться любая из многих различных вещей.</para> Здесь может выполняться любая из многих различных
вещей.</para>
<orderedlist> <orderedlist>
<listitem> <listitem>
<para>Если существует скрипт <para>Если существует скрипт
<filename>scripts/configure</filename>, то он запускается. <filename>scripts/configure</filename>, то он
</para> запускается.</para>
</listitem> </listitem>
<listitem> <listitem>
<para>Если задана переменная <varname>HAS_CONFIGURE</varname> <para>Если задана переменная
или <varname>GNU_CONFIGURE</varname>, то запускается скрипт <varname>HAS_CONFIGURE</varname> или
<filename>WRKSRC/configure</filename>. <varname>GNU_CONFIGURE</varname>, то запускается скрипт
</para> <filename>WRKSRC/configure</filename>.</para>
</listitem> </listitem>
</orderedlist> </orderedlist>
</step> </step>
@ -97,10 +100,10 @@
<step> <step>
<para>Выполняется цель <buildtarget>stage</buildtarget>. <para>Выполняется цель <buildtarget>stage</buildtarget>.
Конечный набор построенных файлов помещается во временный Конечный набор построенных файлов помещается во временный
каталог (<varname>STAGEDIR</varname>, смотрите каталог (<varname>STAGEDIR</varname>, смотрите <xref
<xref linkend="staging"/>). Иерархия этого linkend="staging"/>). Иерархия этого каталога отражает
каталога отражает иерархию каталогов системы, в которую иерархию каталогов системы, в которую данный пакет будет
данный пакет будет устанавливаться.</para> устанавливаться.</para>
</step> </step>
<step> <step>
@ -112,132 +115,139 @@
<para>Выше перечислены стандартные действия. Кроме того, вы сами <para>Выше перечислены стандартные действия. Кроме того, вы сами
можете определить цели можете определить цели
<buildtarget>pre-<replaceable>что-то</replaceable></buildtarget> или <buildtarget>pre-<replaceable>что-то</replaceable></buildtarget>
или
<buildtarget>post-<replaceable>что-то</replaceable></buildtarget>, <buildtarget>post-<replaceable>что-то</replaceable></buildtarget>,
или создать скрипты с такими именами в подкаталоге или создать скрипты с такими именами в подкаталоге
<filename>scripts</filename>, и они будут запущены до или после <filename>scripts</filename>, и они будут запущены до или после
выполнения действий по умолчанию.</para> выполнения действий по умолчанию.</para>
<para>Например, если у вас есть цель <para>Например, если у вас есть цель
<buildtarget>post-extract</buildtarget>, определённая в вашем файле <buildtarget>post-extract</buildtarget>, определённая в вашем
<filename>Makefile</filename> и файл <filename>pre-build</filename> в файле <filename>Makefile</filename> и файл
подкаталоге <filename>pre-build</filename> в подкаталоге
<filename>scripts</filename>, то после выполнения обычных действий по <filename>scripts</filename>, то после выполнения обычных
распаковке, будет вызвана цель <buildtarget>post-extract</buildtarget> действий по распаковке, будет вызвана цель
а скрипт <filename>pre-build</filename> будет выполнен перед <buildtarget>post-extract</buildtarget> а скрипт
запуском стандартных правил построения. Рекомендуется использовать <filename>pre-build</filename> будет выполнен перед запуском
цели из <filename>Makefile</filename>, если действия достаточно стандартных правил построения. Рекомендуется использовать цели
из <filename>Makefile</filename>, если действия достаточно
просты, потому что в дальнейшем будет проще определить, какие просты, потому что в дальнейшем будет проще определить, какие
нестандартные действия требует порт.</para> нестандартные действия требует порт.</para>
<para>Действия по умолчанию выполняются целями <para>Действия по умолчанию выполняются целями
<buildtarget>do-<replaceable>что-то</replaceable></buildtarget> из <buildtarget>do-<replaceable>что-то</replaceable></buildtarget>
<filename>bsd.port.mk</filename>. Например, команды для из <filename>bsd.port.mk</filename>. Например, команды для
распаковки порта находятся в цели распаковки порта находятся в цели
<buildtarget>do-extract</buildtarget>. Если вам не хватает цели по <buildtarget>do-extract</buildtarget>. Если вам не хватает
умолчанию, вы можете ее исправить, переопределив цель цели по умолчанию, вы можете ее исправить, переопределив цель
<buildtarget>do-<replaceable>something</replaceable></buildtarget> <buildtarget>do-<replaceable>something</replaceable></buildtarget>
в вашем файле <filename>Makefile</filename>.</para> в вашем файле <filename>Makefile</filename>.</para>
<note> <note>
<para><quote>Основные</quote> цели (к примеру, <para><quote>Основные</quote> цели (к примеру,
<buildtarget>extract</buildtarget>, <buildtarget>configure</buildtarget> <buildtarget>extract</buildtarget>,
и так далее) не делают ничего больше, <buildtarget>configure</buildtarget> и так далее) не делают
чем проверяют успешность завершения всех предыдущих шагов и ничего больше, чем проверяют успешность завершения всех
вызывают настоящие цели или скрипты, и их не нужно менять. Если предыдущих шагов и вызывают настоящие цели или скрипты, и их
вам нужно изменить распаковку, исправляйте не нужно менять. Если вам нужно изменить распаковку,
<buildtarget>do-extract</buildtarget>, но никогда не меняйте способ исправляйте <buildtarget>do-extract</buildtarget>, но никогда
работы <buildtarget>extract</buildtarget>! Кроме того, цель не меняйте способ работы <buildtarget>extract</buildtarget>!
<buildtarget>post-deinstall</buildtarget> является недействительной Кроме того, цель <buildtarget>post-deinstall</buildtarget>
и не выполняется инфраструктурой портов.</para> является недействительной и не выполняется инфраструктурой
портов.</para>
</note> </note>
<para>Теперь, когда вы представляете, что происходит, когда <para>Теперь, когда вы представляете, что происходит, когда
пользователь набирает команду <command>make install</command>, пользователь набирает команду <command>make install</command>,
давайте пройдемся давайте пройдемся через шаги, рекомендуемые для создания
через шаги, рекомендуемые для создания настоящего порта.</para> настоящего порта.</para>
</sect1> </sect1>
<sect1 xml:id="slow-sources"> <sect1 xml:id="slow-sources">
<title>Получение исходного кода</title> <title>Получение исходного кода</title>
<para>Получите оригинальные исходные тексты (обычно) в виде <para>Получите оригинальные исходные тексты (обычно) в виде
упакованного tar-архива упакованного tar-архива (<filename>foo.tar.gz</filename> или
(<filename>foo.tar.gz</filename> или <filename>foo.tar.bz2</filename>) и скопируйте его в каталог
<filename>foo.tar.bz2</filename>) <varname>DISTDIR</varname>. Всегда используйте исходные тексты
и скопируйте его в каталог <varname>DISTDIR</varname>. Всегда <emphasis>основной ветки разработки</emphasis> везде, где это
используйте исходные тексты <emphasis>основной ветки возможно.</para>
разработки</emphasis> везде, где это возможно.</para>
<para>Вам потребуется задать значение переменной <para>Вам потребуется задать значение переменной
<varname>MASTER_SITES</varname> так, чтобы оно указывало на <varname>MASTER_SITES</varname> так, чтобы оно указывало на
местоположение оригинального tar-архива. В файле местоположение оригинального tar-архива. В файле
<filename>bsd.sites.mk</filename> вы найдёте краткие обозначения <filename>bsd.sites.mk</filename> вы найдёте краткие
для большинства популярных сайтов. Пожалуйста, используйте эти обозначения для большинства популярных сайтов. Пожалуйста,
сайты&mdash;и соответствующие определения&mdash;везде, где это используйте эти сайты&mdash;и соответствующие
возможно, чтобы избежать проблем повторения одной и той же информации определения&mdash;везде, где это возможно, чтобы избежать
в базе источников. Так как эти сайты со временем меняются, для проблем повторения одной и той же информации в базе источников.
всех причастных поддержка становится настоящим кошмаром.</para> Так как эти сайты со временем меняются, для всех причастных
поддержка становится настоящим кошмаром.</para>
<para>Если вы не можете найти FTP/HTTP сайт с хорошим подключением к <para>Если вы не можете найти FTP/HTTP сайт с хорошим
сети, или находите только сайты, которые имеют раздражающе подключением к сети, или находите только сайты, которые имеют
нестандартные форматы, то можете захотеть поместить копию на надежный раздражающе нестандартные форматы, то можете захотеть поместить
сервер FTP или HTTP, который вам доступен (например, ваша домашняя копию на надежный сервер FTP или HTTP, который вам доступен
страница).</para> (например, ваша домашняя страница).</para>
<para>Если вы не можете найти доступного и надёжного места для <para>Если вы не можете найти доступного и надёжного места для
помещения дистрибутивного файла, то мы сами сможем разместить его на помещения дистрибутивного файла, то мы сами сможем разместить
сервере <systemitem>ftp.FreeBSD.org</systemitem>; однако это наименее его на сервере <systemitem>ftp.FreeBSD.org</systemitem>; однако
рекомендуемое решение. Дистрибутивный файл должен это наименее рекомендуемое решение. Дистрибутивный файл должен
быть помещён в каталог <filename>~/public_distfiles/</filename> быть помещён в каталог <filename>~/public_distfiles/</filename>
одного из пользователей машины <systemitem>freefall</systemitem>. Попросите одного из пользователей машины
того, кто коммиттил ваш порт, сделать это. Этот человек также задаст <systemitem>freefall</systemitem>. Попросите того, кто
коммиттил ваш порт, сделать это. Этот человек также задаст
переменной <varname>MASTER_SITES</varname> значение переменной <varname>MASTER_SITES</varname> значение
<varname>MASTER_SITE_LOCAL</varname>, а в переменной <varname>MASTER_SITE_LOCAL</varname>, а в переменной
<varname>MASTER_SITE_SUBDIR</varname> укажет своё имя пользователя <varname>MASTER_SITE_SUBDIR</varname> укажет своё имя
с машины <systemitem>freefall</systemitem>.</para> пользователя с машины <systemitem>freefall</systemitem>.</para>
<para>Если дистрибутивные файлы вашего порта постоянно меняются по <para>Если дистрибутивные файлы вашего порта постоянно меняются
неизвестным причинам без изменения версий со стороны автора, остаётся по неизвестным причинам без изменения версий со стороны автора,
только поместить дистрибутив на вашу домашнюю Web-страницу и указать остаётся только поместить дистрибутив на вашу домашнюю
её первой в списке <varname>MASTER_SITES</varname>. Если можете, Web-страницу и указать её первой в списке
попытайтесь договориться с автором порта об этом; это действительно <varname>MASTER_SITES</varname>. Если можете, попытайтесь
договориться с автором порта об этом; это действительно
помогает в достижении некоторого управления исходным кодом. помогает в достижении некоторого управления исходным кодом.
Размещение собственной версии поможет избежать появления ошибок у Размещение собственной версии поможет избежать появления ошибок
пользователей типа <errorname>checksum mismatch</errorname>, а у пользователей типа <errorname>checksum mismatch</errorname>,
также уменьшит нагрузку на людей, сопровождающих наш FTP-сервер. а также уменьшит нагрузку на людей, сопровождающих наш
Также, если у порта имеется только один основной сервер, то FTP-сервер. Также, если у порта имеется только один основной
рекомендуется поместить архивную копию на свой сайт и указать его в сервер, то рекомендуется поместить архивную копию на свой сайт
списке <varname>MASTER_SITES</varname> вторым.</para> и указать его в списке <varname>MASTER_SITES</varname>
вторым.</para>
<para>Если вашему порту требуются дополнительные `патчи', доступные <para>Если вашему порту требуются дополнительные `патчи',
в Интернет, скачайте также и их, поместив в каталог доступные в Интернет, скачайте также и их, поместив в каталог
<varname>DISTDIR</varname>. Не волнуйтесь, если они находятся не <varname>DISTDIR</varname>. Не волнуйтесь, если они находятся
на том же сайте, откуда взят дистрибутивный архив, мы умеем не на том же сайте, откуда взят дистрибутивный архив, мы умеем
обрабатывать такие ситуации (смотрите описание <link linkend="porting-patchfiles">PATCHFILES</link> ниже).</para> обрабатывать такие ситуации (смотрите описание <link
linkend="porting-patchfiles">PATCHFILES</link> ниже).</para>
</sect1> </sect1>
<sect1 xml:id="slow-modifying"> <sect1 xml:id="slow-modifying">
<title>Модификация порта</title> <title>Модификация порта</title>
<para>Распакуйте копию дистрибутивного файла в отдельный каталог и <para>Распакуйте копию дистрибутивного файла в отдельный каталог
внесите изменения, которые необходимы для того, чтобы порт и внесите изменения, которые необходимы для того, чтобы порт
компилировался нормально в текущей версии &os;. компилировался нормально в текущей версии &os;.
<emphasis>Тщательно отслеживайте</emphasis> все, что вы делаете, <emphasis>Тщательно отслеживайте</emphasis> все, что вы
этот процесс вам предстоит автоматизировать. Все, включая удаление, делаете, этот процесс вам предстоит автоматизировать. Все,
добавление или модификацию в файлах должны будут выполняться включая удаление, добавление или модификацию в файлах должны
автоматически с помощью скриптов или файлов патчей, когда вы будут выполняться автоматически с помощью скриптов или файлов
завершите работу над портом.</para> патчей, когда вы завершите работу над портом.</para>
<para>Если вашему порту во время компиляции, установки и настройки <para>Если вашему порту во время компиляции, установки и
требуется довольно много взаимодействовать с пользователем, то настройки требуется довольно много взаимодействовать с
посмотрите на один из классических скриптов пользователем, то посмотрите на один из классических скриптов
<application>Configure</application> Лэрри Уолла (Larry Wall) и <application>Configure</application> Лэрри Уолла (Larry Wall) и
сделайте сами что-либо подобное. Предназначение новой коллекции сделайте сами что-либо подобное. Предназначение новой
портов - это сделать каждое приложение в стиле коллекции портов - это сделать каждое приложение в стиле
<quote>plug-and-play</quote> настолько, насколько это вообще возможно <quote>plug-and-play</quote> настолько, насколько это вообще
для конечного пользователя при минимальном использовании дискового возможно для конечного пользователя при минимальном
пространства.</para> использовании дискового пространства.</para>
<note> <note>
<para>Если явно не указано обратное, то патчи, скрипты и другие <para>Если явно не указано обратное, то патчи, скрипты и другие
@ -250,19 +260,18 @@
<sect1 xml:id="slow-patch"> <sect1 xml:id="slow-patch">
<title>Создание патчей</title> <title>Создание патчей</title>
<para>Файлы, которые добавлялись или изменялись в процессе создания <para>Файлы, которые добавлялись или изменялись в процессе
порта, могут быть выявлены программой &man.diff.1;, создания порта, могут быть выявлены программой &man.diff.1;, а
а результат работы этой программы может быть в дальнейшем передан результат работы этой программы может быть в дальнейшем передан
программе &man.patch.1;. Такое действие с обычным файлом программе &man.patch.1;. Такое действие с обычным файлом
подразумевает сохранение копии файла с первоначальным содержимым подразумевает сохранение копии файла с первоначальным
перед внесением каких-либо изменений.</para> содержимым перед внесением каких-либо изменений.</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>Патчи сохраняются в виде файлов с именем <para>Патчи сохраняются в виде файлов с именем
<filename>patch-*</filename>, где <filename>patch-*</filename>, где <replaceable>*</replaceable>
<replaceable>*</replaceable> обозначает путь к файлу, обозначает путь к файлу, к которому применяется патч, такой как
к которому применяется патч, такой как
<filename>patch-Imakefile</filename> или <filename>patch-Imakefile</filename> или
<filename>patch-src-config.h</filename>.</para> <filename>patch-src-config.h</filename>.</para>
@ -276,39 +285,40 @@
<para>Для порождении патчей для новых добавляемых файлов <para>Для порождении патчей для новых добавляемых файлов
используется параметр <option>-N</option>, который заставляет используется параметр <option>-N</option>, который заставляет
&man.diff.1; трактовать несуществующие прежде файлы как если &man.diff.1; трактовать несуществующие прежде файлы как если бы
бы они существовали, но имели пустое содержимое:</para> они существовали, но имели пустое содержимое:</para>
<screen>&prompt.user; <userinput>diff -u -N <replaceable>newfile</replaceable>.orig <replaceable>newfile</replaceable> &gt; patch-<replaceable>pathname-newfile</replaceable></userinput></screen> <screen>&prompt.user; <userinput>diff -u -N <replaceable>newfile</replaceable>.orig <replaceable>newfile</replaceable> &gt; patch-<replaceable>pathname-newfile</replaceable></userinput></screen>
<para>Файлы с патчами помещаются в <para>Файлы с патчами помещаются в каталоге
каталоге <varname>PATCHDIR</varname> <varname>PATCHDIR</varname> (как правило, это <filename
(как правило, это <filename class="directory">files/</filename>), class="directory">files/</filename>), откуда они будут взяты
откуда они будут взяты автоматически. Все патчи обязаны быть сделаны автоматически. Все патчи обязаны быть сделаны относительно
относительно каталога <varname>WRKSRC</varname> (как правило, каталога <varname>WRKSRC</varname> (как правило, это каталог, в
это каталог, в который распаковывается исходный архив и где будет который распаковывается исходный архив и где будет выполняться
выполняться построение). Для упрощения внесения изменений и построение). Для упрощения внесения изменений и обновлений
обновлений избегайте наличия более чем одного патча для избегайте наличия более чем одного патча для одного и того же
одного и того же файла (например, патчей файла (например, патчей <filename>patch-file</filename> и
<filename>patch-file</filename> и <filename>patch-file2</filename>, <filename>patch-file2</filename>, оба меняющих файл
оба меняющих файл <filename>WRKSRC/foobar.c</filename>). <filename>WRKSRC/foobar.c</filename>). Обратите внимание, что
Обратите внимание, что если путь к изменяемому файлу содержит символ если путь к изменяемому файлу содержит символ подчеркивания
подчеркивания (<literal>_</literal>), то патч должен содержать в своем (<literal>_</literal>), то патч должен содержать в своем имени
имени два подчеркивания вместо одного. Например, для применения патча два подчеркивания вместо одного. Например, для применения
на файл с именем <filename>src/freeglut_joystick.c</filename> патча на файл с именем
соответствующий патч следует назвать <filename>src/freeglut_joystick.c</filename> соответствующий
патч следует назвать
<filename>patch-src-freeglut__joystick.c</filename>.</para> <filename>patch-src-freeglut__joystick.c</filename>.</para>
<para>Пожалуйста, используйте для именования патчей только символы <para>Пожалуйста, используйте для именования патчей только
<literal>[-+._a-zA-Z0-9]</literal>. Не используйте любые другие символы <literal>[-+._a-zA-Z0-9]</literal>. Не используйте
символы, кроме этих. Не называйте патчи как любые другие символы, кроме этих. Не называйте патчи как
<filename>patch-aa</filename> или <filename>patch-ab</filename>, <filename>patch-aa</filename> или
всегда ссылайтесь на путь и название файла в названиях самих <filename>patch-ab</filename>, всегда ссылайтесь на путь и
патчей.</para> название файла в названиях самих патчей.</para>
<para>Существует альтернативный упрощённый способ создания <para>Существует альтернативный упрощённый способ создания патчей
патчей для существующих файлов. Первые шаги те же самые: для существующих файлов. Первые шаги те же самые: создание
создание копии неизменённого файла с расширением копии неизменённого файла с расширением
<filename>.orig</filename> и внесение изменений. После этого <filename>.orig</filename> и внесение изменений. После этого
используйте <command>make makepatch</command>, чтобы обновить используйте <command>make makepatch</command>, чтобы обновить
файлы с патчами в каталоге <filename>files</filename> данного файлы с патчами в каталоге <filename>files</filename> данного
@ -323,42 +333,44 @@
<literal>&dollar;Id</literal> или <literal>&dollar;Id</literal> или
<literal>&dollar;RCS</literal>.</para> <literal>&dollar;RCS</literal>.</para>
<para>Использование параметра рекурсии (<option>-r</option>) с командой <para>Использование параметра рекурсии (<option>-r</option>) с
&man.diff.1; для генерации патчей - это хорошо, но всё же, командой &man.diff.1; для генерации патчей - это хорошо, но всё
пожалуйста, смотрите на получающиеся патчи, чтобы убедиться в же, пожалуйста, смотрите на получающиеся патчи, чтобы убедиться
отсутствии ненужного мусора. В частности, diff-разниц между двумя в отсутствии ненужного мусора. В частности, diff-разниц между
резервными копиями файлов, файлы <filename>Makefile</filename>, когда двумя резервными копиями файлов, файлы
как порт использует <command>Imake</command> или <filename>Makefile</filename>, когда как порт использует
GNU-версию программы <command>configure</command>, и так далее, <command>Imake</command> или GNU-версию программы
не нужны, и должны быть удалены. Если было необходимо <command>configure</command>, и так далее, не нужны, и должны
отредактировать файл <filename>configure.in</filename> и быть удалены. Если было необходимо отредактировать файл
запустить <command>autoconf</command> для перегенерации <filename>configure.in</filename> и запустить
<command>autoconf</command> для перегенерации
<command>configure</command>, не нужно включать файлы diff для <command>configure</command>, не нужно включать файлы diff для
<command>configure</command> (они частенько вырастают до нескольких <command>configure</command> (они частенько вырастают до
тысяч строк!). Вместо этого задайте нескольких тысяч строк!). Вместо этого задайте
<literal>USE_AUTOTOOLS=autoconf:261</literal> и <literal>USE_AUTOTOOLS=autoconf:261</literal> и включите
включите diff-файл для <filename>configure.in</filename>.</para> diff-файл для <filename>configure.in</filename>.</para>
<para>Старайтесь минимизировать в патчах объём <para>Старайтесь минимизировать в патчах объём нефункциональных
нефункциональных изменений с пустыми символами. В мире Открытого изменений с пустыми символами. В мире Открытого Исходного Кода
Исходного Кода является распространенным совместное использование является распространенным совместное использование проектами
проектами больших объемов кодовой базы, но с различными стилями больших объемов кодовой базы, но с различными стилями и
и правилами отступов. При копировании работающей функциональной правилами отступов. При копировании работающей функциональной
части из одного проекта для исправления похожей области в другом, части из одного проекта для исправления похожей области в
будьте аккуратны, пожалуйста: получаемый однострочный патч другом, будьте аккуратны, пожалуйста: получаемый однострочный
может указаться полон нефункциональных изменений. Это не только патч может указаться полон нефункциональных изменений. Это не
увеличивает размер репозитория <application>Subversion</application>, только увеличивает размер репозитория
но также усложняет поиск того, <application>Subversion</application>, но также усложняет поиск
что конкретно вызвало проблему и что вообще поменялось.</para> того, что конкретно вызвало проблему и что вообще
поменялось.</para>
<para>Если нужно удалить файл, сделайте это при выполнении цели <para>Если нужно удалить файл, сделайте это при выполнении цели
<buildtarget>post-extract</buildtarget>, вместо того чтобы <buildtarget>post-extract</buildtarget>, вместо того чтобы
оформлять это как часть патча.</para> оформлять это как часть патча.</para>
<para>Простые перемещения могут быть выполнены непосредственно из <para>Простые перемещения могут быть выполнены непосредственно из
<filename>Makefile</filename> порта с использованием &man.sed.1; в <filename>Makefile</filename> порта с использованием
режиме in-place. Это удобно, когда при изменении используется &man.sed.1; в режиме in-place. Это удобно, когда при изменении
значение переменной:</para> используется значение переменной:</para>
<programlisting>post-patch: <programlisting>post-patch:
@${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README</programlisting> @${REINPLACE_CMD} -e 's|for Linux|for FreeBSD|g' ${WRKSRC}/README</programlisting>
@ -368,8 +380,8 @@
причиной проблем с дальнейшей упаковкой, предупреждениями причиной проблем с дальнейшей упаковкой, предупреждениями
компилятора или выполнением скриптов (таких как компилятора или выполнением скриптов (таких как
<literal>/bin/sh^M not found</literal>). Для быстрого <literal>/bin/sh^M not found</literal>). Для быстрого
преобразования всех файлов из CR/LF просто в LF добавьте преобразования всех файлов из CR/LF просто в LF добавьте в
в <filename>Makefile</filename> порта эту запись:</para> <filename>Makefile</filename> порта эту запись:</para>
<programlisting>USES= dos2unix</programlisting> <programlisting>USES= dos2unix</programlisting>
@ -379,12 +391,12 @@
DOS2UNIX_FILES= util.c util.h</programlisting> DOS2UNIX_FILES= util.c util.h</programlisting>
<para>Используйте <varname>DOS2UNIX_REGEX</varname>, чтобы <para>Используйте <varname>DOS2UNIX_REGEX</varname>, чтобы
преобразовать группу файлов в разных подкаталогах. преобразовать группу файлов в разных подкаталогах. Его
Его параметром является регулярное выражение, совместимое с параметром является регулярное выражение, совместимое с
&man.find.1;. Подробнее о формате в &man.re.format.7;. &man.find.1;. Подробнее о формате в &man.re.format.7;. Такой
Такой вариант удобен для преобразования всех файлов заданного вариант удобен для преобразования всех файлов заданного
расширения. Для примера, преобразуем все исходные файлы, расширения. Для примера, преобразуем все исходные файлы, не
не затрагивая двоичные файлы:</para> затрагивая двоичные файлы:</para>
<programlisting>USES= dos2unix <programlisting>USES= dos2unix
DOS2UNIX_REGEX= .*\.([ch]|cpp)</programlisting> DOS2UNIX_REGEX= .*\.([ch]|cpp)</programlisting>
@ -401,34 +413,35 @@ DOS2UNIX_GLOB= *.c *.cpp *.h</programlisting>
<sect1 xml:id="slow-configure"> <sect1 xml:id="slow-configure">
<title>Конфигурирование</title> <title>Конфигурирование</title>
<para>Поместите все дополнительные команды, требуемые для настройки, <para>Поместите все дополнительные команды, требуемые для
в ваш скрипт <filename>configure</filename> и сохраните его в настройки, в ваш скрипт <filename>configure</filename> и
подкаталоге <filename>scripts</filename>. Как отмечено выше, вы сохраните его в подкаталоге <filename>scripts</filename>. Как
можете сделать это целями в файле <filename>Makefile</filename> отмечено выше, вы можете сделать это целями в файле
и/или скриптами с именами <filename>pre-configure</filename> или <filename>Makefile</filename> и/или скриптами с именами
<filename>pre-configure</filename> или
<filename>post-configure</filename>.</para> <filename>post-configure</filename>.</para>
</sect1> </sect1>
<sect1 xml:id="slow-user-input"> <sect1 xml:id="slow-user-input">
<title>Обработка пользовательского ввода</title> <title>Обработка пользовательского ввода</title>
<para>Если для построения, конфигурации или установки вашего порта <para>Если для построения, конфигурации или установки вашего
требуется некоторый ввод со стороны пользователя, то вы должны задать порта требуется некоторый ввод со стороны пользователя, то вы
переменную <varname>IS_INTERACTIVE</varname> в вашем файле должны задать переменную <varname>IS_INTERACTIVE</varname> в
<filename>Makefile</filename>. В случае <quote>ночного вашем файле <filename>Makefile</filename>. В случае
построения</quote> это позволит пропустить <quote>ночного построения</quote> это позволит пропустить ваш
ваш порт, если пользователь в своем окружении задал переменную порт, если пользователь в своем окружении задал переменную
<envar>BATCH</envar> (и если пользователь установил переменную <envar>BATCH</envar> (и если пользователь установил переменную
<envar>INTERACTIVE</envar>, то будут строиться <envar>INTERACTIVE</envar>, то будут строиться
<emphasis>только</emphasis> порты, которые требуют взаимодействия <emphasis>только</emphasis> порты, которые требуют
с пользователем. Это сэкономит значительное количество времени на взаимодействия с пользователем. Это сэкономит значительное
части машин, которые постоянно строят порты (смотрите ниже).</para> количество времени на части машин, которые постоянно строят
порты (смотрите ниже).</para>
<para>При наличии разумных ответов на задаваемые вопросы, подходящих по <para>При наличии разумных ответов на задаваемые вопросы,
умолчанию, также рекомендуется проверять переменную подходящих по умолчанию, также рекомендуется проверять
<varname>PACKAGE_BUILDING</varname> и выключать интерактивный скрипт, переменную <varname>PACKAGE_BUILDING</varname> и выключать
если он есть. Это позволит нам строить пакеты для помещения на интерактивный скрипт, если он есть. Это позволит нам строить
компакт-диски и FTP-серверы.</para> пакеты для помещения на компакт-диски и FTP-серверы.</para>
</sect1> </sect1>
</chapter> </chapter>

File diff suppressed because it is too large Load diff

View file

@ -7,7 +7,9 @@
Original revision: r43840 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>
@ -16,31 +18,32 @@
<para>Некоторые утилиты &os; для сопровождения портов, например, <para>Некоторые утилиты &os; для сопровождения портов, например,
&man.portupgrade.1;, опираются на базу данных с именем &man.portupgrade.1;, опираются на базу данных с именем
<filename>/usr/ports/INDEX</filename>, в которой отслеживаются такие <filename>/usr/ports/INDEX</filename>, в которой отслеживаются
характеристики портов, как их зависимости. Файл такие характеристики портов, как их зависимости. Файл
<filename>INDEX</filename> создаётся при помощи <filename>INDEX</filename> создаётся при помощи
<filename>ports/Makefile</filename> верхнего уровня по команде <filename>ports/Makefile</filename> верхнего уровня по команде
<command>make index</command>, спускающейся в подкаталог каждого <command>make index</command>, спускающейся в подкаталог
порта и выполняющей в нём <command>make describe</command>. Таким каждого порта и выполняющей в нём <command>make
образом, если выполнение <command>make describe</command> с describe</command>. Таким образом, если выполнение
каким-либо портом завершится неудачно, то никому не удастся создать <command>make describe</command> с каким-либо портом завершится
неудачно, то никому не удастся создать
<filename>INDEX</filename>, при этом много людей вскоре станут <filename>INDEX</filename>, при этом много людей вскоре станут
несчастны.</para> несчастны.</para>
<note> <note>
<para>Возможность генерировать этот файл очень важна вне зависимости <para>Возможность генерировать этот файл очень важна вне
от того, какие параметры присутствуют в зависимости от того, какие параметры присутствуют в
<filename>make.conf</filename>, поэтому, пожалуйста, избегайте, <filename>make.conf</filename>, поэтому, пожалуйста,
таких вещей, как использование декларации избегайте, таких вещей, как использование декларации
<literal>.error</literal>, когда (к примеру) требования к <literal>.error</literal>, когда (к примеру) требования к
зависимости не было удовлетворено. (Смотрите зависимости не было удовлетворено. (Смотрите
<xref linkend="dads-dot-error"/>.)</para> <xref linkend="dads-dot-error"/>.)</para>
</note> </note>
<para>Если команда <command>make describe</command> выдаёт строчку, а <para>Если <command>make describe</command> выдаёт строчку, а не
не ошибку, то для вас это пройдёт безболезненно. Обратитесь к файлу ошибку, то для вас это пройдёт безболезненно. Обратитесь к
<filename>bsd.port.mk</filename>, чтобы выяснить значение выдаваемых файлу <filename>bsd.port.mk</filename>, чтобы выяснить значение
строк.</para> выдаваемых строк.</para>
<para>Заметьте также, что запуск последней версии <para>Заметьте также, что запуск последней версии
<command>portlint</command> (как указано в следующем разделе) <command>portlint</command> (как указано в следующем разделе)
@ -51,118 +54,131 @@
<sect1 xml:id="testing-portlint"> <sect1 xml:id="testing-portlint">
<title>Portlint</title> <title>Portlint</title>
<para>Проверьте свою работу командой <link linkend="porting-portlint"><command>portlint</command></link> <para>Проверьте свою работу командой <link
linkend="porting-portlint"><command>portlint</command></link>
перед тем, как её отослать или перенести в дерево портов. перед тем, как её отослать или перенести в дерево портов.
<command>portlint</command> предупреждает вас о многих <command>portlint</command> предупреждает вас о многих
распространённых ошибках, как функциональных, так и стилистических. распространённых ошибках, как функциональных, так и
Для нового (или скопированного внутри хранилища) порта самым стилистических. Для нового (или скопированного внутри
подходящим является запуск <command>portlint -A</command>; для хранилища) порта самым подходящим является запуск
уже существующего порта достаточно будет запустить <command>portlint -A</command>; для уже существующего порта
достаточно будет запустить
<command>portlint -C</command>.</para> <command>portlint -C</command>.</para>
<para>Так как для обнаружения ошибок <command>portlint</command> <para>Так как для обнаружения ошибок <command>portlint</command>
использует эвристические методы, то им могут выдаваться и ошибочные использует эвристические методы, то им могут выдаваться и
предупреждения. Кроме того, время от времени нечто, отмечаемое как ошибочные предупреждения. Кроме того, время от времени нечто,
некорректность, из-за ограничений механизма создания портов не может отмечаемое как некорректность, из-за ограничений механизма
быть сделано никак иначе. Если вы сомневаетесь, то лучше всего создания портов не может быть сделано никак иначе. Если вы
спросить в &a.ports;.</para> сомневаетесь, то лучше всего спросить в &a.ports;.</para>
</sect1> </sect1>
<sect1 xml:id="testing-porttools"> <sect1 xml:id="testing-porttools">
<title>Port Tools</title> <title>Port Tools</title>
<para>Программа <package role="port">ports-mgmt/porttools</package> <para>Программа <package
входит в состав Коллекции Портов.</para> role="port">ports-mgmt/porttools</package> входит в состав
Коллекции Портов.</para>
<para><command>port</command> является сценарием переднего плана, <para><command>port</command> является сценарием переднего плана,
который может упростить вам задачу тестирования. Если вы хотите который может упростить вам задачу тестирования. Если вы
проверить новый порт или обновить существующий, то вы можете хотите проверить новый порт или обновить существующий, то вы
использовать <command>port test</command> для проверки вашего порта, можете использовать <command>port test</command> для проверки
включая проверку <link linkend="testing-portlint"><command>portlint</command></link>. Эта вашего порта, включая проверку <link
команда также находит и отображает любые файлы, которые невключенные linkend="testing-portlint"><command>portlint</command></link>.
в <filename>pkg-plist</filename>. Смотрите следующий пример:</para> Эта команда также находит и отображает любые файлы, которые
невключенные в <filename>pkg-plist</filename>. Смотрите
следующий пример:</para>
<screen>&prompt.root; <userinput>port test /usr/ports/net/csup</userinput></screen> <screen>&prompt.root; <userinput>port test /usr/ports/net/csup</userinput></screen>
</sect1> </sect1>
<sect1 xml:id="porting-prefix"> <sect1 xml:id="porting-prefix">
<title><varname>PREFIX</varname> и <varname>DESTDIR</varname></title> <title><varname>PREFIX</varname> и
<varname>DESTDIR</varname></title>
<para>Переменная <varname>PREFIX</varname> определяет, куда будет <para>Переменная <varname>PREFIX</varname> определяет, куда будет
установлен порт. По умолчанию это <filename>/usr/local</filename>, установлен порт. По умолчанию это
но может меняться пользователем на собственный путь, такой как <filename>/usr/local</filename>, но может меняться
<filename>/opt</filename>. В вашем порту значение этой переменной пользователем на собственный путь, такой как
должно учитываться.</para> <filename>/opt</filename>. В вашем порту значение этой
переменной должно учитываться.</para>
<para>Если пользователь установил переменную <varname>DESTDIR</varname>, <para>Если пользователь установил переменную
то она определяет полное альтернативное окружение, обычно, это jail <varname>DESTDIR</varname>, то она определяет полное
или установленная система, смонтированная в месте, отличном от альтернативное окружение, обычно, это jail или установленная
система, смонтированная в месте, отличном от
<filename>/</filename>. На самом деле порт устанавливается в <filename>/</filename>. На самом деле порт устанавливается в
<filename>DESTDIR/PREFIX</filename> <filename>DESTDIR/PREFIX</filename> и регистрируется в базе
и регистрируется в базе данных пакетов в данных пакетов в <filename>DESTDIR/var/db/pkg</filename>.
<filename>DESTDIR/var/db/pkg</filename>.
Поскольку управление <varname>DESTDIR</varname> производится Поскольку управление <varname>DESTDIR</varname> производится
автоматически инфраструктурой портов с помощью &man.chroot.8;, вам автоматически инфраструктурой портов с помощью &man.chroot.8;,
не нужны никакие изменения или проявление особой осторожности вам не нужны никакие изменения или проявление особой
при написании <varname>DESTDIR</varname>-совместимых портов.</para> осторожности при написании портов, совместымых с
<varname>DESTDIR</varname>.</para>
<para>Значение переменной <varname>PREFIX</varname> будет установлено <para>Значение переменной <varname>PREFIX</varname> будет
в <varname>LOCALBASE</varname> (по умолчанию установлено в <varname>LOCALBASE</varname> (по умолчанию
<filename>/usr/local</filename>). Если <filename>/usr/local</filename>). Если задана переменная
задана переменная <varname>USE_LINUX_PREFIX</varname>, то <varname>USE_LINUX_PREFIX</varname>, то
<varname>PREFIX</varname> примет значение <varname>LINUXBASE</varname> <varname>PREFIX</varname> примет значение
(по умолчанию <filename>/compat/linux</filename>).</para> <varname>LINUXBASE</varname> (по умолчанию
<filename>/compat/linux</filename>).</para>
<para>Избегание явно прописываемых путей <filename>/usr/local</filename> <para>Избегание явно прописываемых путей
в исходном коде сделает порт гораздо более гибким и способным <filename>/usr/local</filename> в исходном коде сделает порт
удовлетворить потребности других серверов. Часто этого можно гораздо более гибким и способным удовлетворить потребности
добиться простой заменой строк <filename>/usr/local</filename> других серверов. Часто этого можно добиться простой заменой
в различных файлах <filename>Makefile</filename> внутри порта на строк <filename>/usr/local</filename> в различных файлах
<filename>Makefile</filename> внутри порта на
<literal>&dollar;{PREFIX}</literal>. Эта переменная <literal>&dollar;{PREFIX}</literal>. Эта переменная
автоматически передаётся далее на каждом этапе построения и автоматически передаётся далее на каждом этапе построения и
установки.</para> установки.</para>
<para>Проверьте, что ваше приложение не устанавливает чего-либо в <para>Проверьте, что ваше приложение не устанавливает чего-либо в
каталог <filename>/usr/local</filename> вместо каталог <filename>/usr/local</filename> вместо
<varname>PREFIX</varname>. Наличие явно указанных путей можно быстро <varname>PREFIX</varname>. Наличие явно указанных путей можно
проверить следующим образом:</para> быстро проверить следующим образом:</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>Если что-то было установлено за пределами <para>Если что-то было установлено за пределами
<varname>PREFIX</varname>, то процесс создания пакета сообщит об <varname>PREFIX</varname>, то процесс создания пакета сообщит
отсутствии файлов.</para> об отсутствии файлов.</para>
<para>Это также стоит проверить с использованием поддержки <para>Это также стоит проверить с использованием поддержки
каталога сборки (смотрите <xref linkend="staging"/>):</para> каталога сборки (смотрите <xref linkend="staging"/>):</para>
<screen>&prompt.root; <userinput>make stage &amp;&amp; make check-orphans &amp;&amp; make package</userinput></screen> <screen>&prompt.root; <userinput>make stage &amp;&amp; make check-orphans &amp;&amp; make package</userinput></screen>
<para>Эти проверки не найдут явно указанных путей внутри файлов порта <para>Эти проверки не найдут явно указанных путей внутри файлов
и не проверят корректность использования <varname>LOCALBASE</varname> порта и не проверят корректность использования
в качестве ссылки на файлы из других портов. Порт, временно <varname>LOCALBASE</varname> в качестве ссылки на файлы из
установленный в <filename>/var/tmp/`make -V PORTNAME`</filename>, других портов. Порт, временно установленный в
следует проверять на работоспособность, чтобы убедиться в отсутствии <filename>/var/tmp/`make -V PORTNAME`</filename>, следует
проверять на работоспособность, чтобы убедиться в отсутствии
проблем с путями.</para> проблем с путями.</para>
<para>Переменная <varname>PREFIX</varname> не должна задаваться явно в <para>Переменная <varname>PREFIX</varname> не должна задаваться
файле <filename>Makefile</filename> порта. Пользователи при установке явно в файле <filename>Makefile</filename> порта. Пользователи
порта могут задать в <varname>PREFIX</varname> свое собственное при установке порта могут задать в <varname>PREFIX</varname>
место, и порт должен учитывать это значение.</para> свое собственное место, и порт должен учитывать это
значение.</para>
<para>Обратитесь к программам/файлам из других портов с <para>Обратитесь к программам/файлам из других портов с
переменными, перечисленными выше, без указания явных маршрутов. переменными, перечисленными выше, без указания явных маршрутов.
Например, если ваш порт требует, чтобы макрос <literal>PAGER</literal> Например, если ваш порт требует, чтобы макрос
являлся полным путем утилиты <command>less</command>, не используйте <literal>PAGER</literal> являлся полным путем утилиты
строковый путь <filename>/usr/local/bin/less</filename>. Вместо <command>less</command>, не используйте строковый путь
этого используйте <literal>&dollar;{LOCALBASE}</literal>:</para> <filename>/usr/local/bin/less</filename>. Вместо этого
используйте <literal>&dollar;{LOCALBASE}</literal>:</para>
<programlisting>-DPAGER=\"&dollar;{LOCALBASE}/bin/less\"</programlisting> <programlisting>-DPAGER=\"&dollar;{LOCALBASE}/bin/less\"</programlisting>
<para>Путь с использованием <varname>LOCALBASE</varname> имеет больше <para>Путь с использованием <varname>LOCALBASE</varname> имеет
шансов оставаться работоспособным, если системный администратор больше шансов оставаться работоспособным, если системный
переместил всё дерево <filename>/usr/local</filename> куда-то в другое администратор переместил всё дерево
место.</para> <filename>/usr/local</filename> куда-то в другое место.</para>
</sect1> </sect1>
<sect1 xml:id="testing-tinderbox"> <sect1 xml:id="testing-tinderbox">
@ -171,21 +187,23 @@
<para>Если вы алчный контрибутор портов, то вы можете захотеть <para>Если вы алчный контрибутор портов, то вы можете захотеть
взглянуть на <application>Tinderbox</application>. Это мощная взглянуть на <application>Tinderbox</application>. Это мощная
система построения и тестирования портов. система построения и тестирования портов.
<application>Tinderbox</application> можно установить, используя <application>Tinderbox</application> можно установить,
порт <package role="port">ports-mgmt/tinderbox</package>. используя порт <package
Обязательно прочитайте поставляемую документацию, поскольку role="port">ports-mgmt/tinderbox</package>. Обязательно
конфигурация не является тривиальной.</para> прочитайте поставляемую документацию, поскольку конфигурация не
является тривиальной.</para>
<para>Для получения подробностей посетите <para>Для получения подробностей посетите <link
<link xlink:href="http://tinderbox.marcuscom.com/">вебсайт Tinderbox</link>.</para> xlink:href="http://tinderbox.marcuscom.com/">вебсайт
Tinderbox</link>.</para>
</sect1> </sect1>
<sect1 xml:id="testing-poudriere"> <sect1 xml:id="testing-poudriere">
<title>Poudriere</title> <title>Poudriere</title>
<para>Если вы контрибутор портов, подумайте об установке <para>Если вы контрибутор портов, подумайте об установке
<application>poudriere</application>. Это мощная система <application>poudriere</application>. Это мощная система для
для построения и тестирования портов. построения и тестирования портов.
<application>Poudriere</application> можно установить из <application>Poudriere</application> можно установить из
<package role="port">ports-mgmt/poudriere</package>.</para> <package role="port">ports-mgmt/poudriere</package>.</para>
@ -194,4 +212,3 @@
Poudriere</link>.</para> Poudriere</link>.</para>
</sect1> </sect1>
</chapter> </chapter>

View file

@ -7,60 +7,66 @@
Original revision: r43840 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>Если вы заметите, что ваш порт устарел по сравнению с последней <para>Если вы заметите, что ваш порт устарел по сравнению с
авторской версией, первым делом вы должны получить самую последней авторской версией, первым делом вы должны получить
последнюю версия порта. Вы можете найти их в каталоге самую последнюю версия порта. Вы можете найти их в каталоге
<filename>ports/ports-current</filename> на зеркальных FTP-серверах &os;. <filename>ports/ports-current</filename> на зеркальных
Однако если вы работаете с достаточно большим количеством портов, FTP-серверах &os;. Однако если вы работаете с достаточно большим
наверное, будет проще использовать количеством портов, наверное, будет проще использовать
<application>Subversion</application> или &man.portsnap.8; для <application>Subversion</application> или &man.portsnap.8; для
поддержания всей коллекции портов в актуальном состоянии, как это поддержания всей коллекции портов в актуальном состоянии, как это
описано в <link xlink:href="&url.books.handbook;/ports-using.html"> описано в <link
Руководстве</link>. К тому же это даст возможность отслеживать все xlink:href="&url.books.handbook;/ports-using.html">Руководстве</link>.
зависимости портов.</para> К тому же это даст возможность отслеживать все зависимости
портов.</para>
<para>На следующем шаге необходимо выяснить, нет ожидает ли уже это <para>На следующем шаге необходимо выяснить, нет ожидает ли уже это
обновление своей очереди. Для этого у вас есть две возможности. обновление своей очереди. Для этого у вас есть две возможности.
Существует интерфейс к <link xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">базе Существует интерфейс к <link
данных сообщений о проблемах FreeBSD (PR)</link> (известной также как xlink:href="http://www.FreeBSD.org/cgi/query-pr-summary.cgi?query">базе
<literal>GNATS</literal>) с поисковыми возможностями. Выберите из данных сообщений о проблемах FreeBSD (PR)</link> (известной
выпадающего списка <literal>ports</literal> и введите название также как <literal>GNATS</literal>) с поисковыми возможностями.
порта.</para> Выберите из выпадающего списка <literal>ports</literal> и введите
название порта.</para>
<para>Однако иногда люди забывают поместить название порта в поле <para>Однако иногда люди забывают поместить название порта в поле
Synopsis в точном виде. В таком случае вы можете воспользоваться Synopsis в точном виде. В таком случае вы можете воспользоваться
<link linkend="portsmon">Системой мониторинга портов &os;</link> <link linkend="portsmon">Системой мониторинга портов &os;</link>
(которая известна также как (которая известна также как <literal>portsmon</literal>). В
<literal>portsmon</literal>). В рамках этой системы делается попытка рамках этой системы делается попытка классифицировать PR,
классифицировать PR, касающиеся портов, по имени порта. Для поиска касающиеся портов, по имени порта. Для поиска PR, относящихся к
PR, относящихся к определённому порту, используйте механизм <link xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Просмотра определённому порту, используйте механизм <link
xlink:href="http://portsmon.FreeBSD.org/portoverview.py">Просмотра
по одному порту</link>.</para> по одному порту</link>.</para>
<para>Если таких отложенных PR не существует, то на следующем этапе <para>Если таких отложенных PR не существует, то на следующем этапе
следует послать сообщение электронной почты человеку, поддерживающему следует послать сообщение электронной почты человеку,
порт, который выдаётся по команде <command>make maintainer</command>. поддерживающему порт, который выдаётся по команде <command>make
Этот человек может уже работать над обновлением, или иметь maintainer</command>. Этот человек может уже работать над
причину не обновлять порт прямо сейчас (например, из-за проблем со обновлением, или иметь причину не обновлять порт прямо сейчас
стабильностью функционирования новой версии); (например, из-за проблем со стабильностью функционирования новой
вам нет нужды дублировать их работу. Заметьте, что неподдерживаемые версии); вам нет нужды дублировать их работу. Заметьте, что
порты перечисляются с адресом сопровождающего неподдерживаемые порты перечисляются с адресом сопровождающего
<literal>ports@FreeBSD.org</literal>, который является всего лишь <literal>ports@FreeBSD.org</literal>, который является всего лишь
адресом общего списка рассылки, так что отправка туда сообщений, адресом общего списка рассылки, так что отправка туда сообщений,
скорее всего, в данном случае не поможет.</para> скорее всего, в данном случае не поможет.</para>
<para>Если сопровождающий просит вас выполнить обновление, либо <para>Если сопровождающий просит вас выполнить обновление, либо
сопровождающий отсутствует, то у вас появляется шанс помочь &os;, сопровождающий отсутствует, то у вас появляется шанс помочь &os;,
приготовив обновление самим! Пожалуйста, делайте это с использованием приготовив обновление самим! Пожалуйста, делайте это с
команды &man.diff.1; в основной системе.</para> использованием команды &man.diff.1; в основной системе.</para>
<para>Чтобы создать подходящий <command>diff</command> для одного патча, <para>Чтобы создать подходящий <command>diff</command> для одного
скопируйте файл, который нужно пропатчить, в патча, скопируйте файл, который нужно пропатчить, в
<replaceable>something.orig</replaceable>, сохраните ваши изменения в <replaceable>something.orig</replaceable>, сохраните ваши
<replaceable>something</replaceable>, а затем создайте ваше патч:</para> изменения в <replaceable>something</replaceable>, а затем
создайте ваше патч:</para>
<informalexample> <informalexample>
<screen>&prompt.user; <userinput>diff -u something.orig something &gt; something.diff</userinput></screen> <screen>&prompt.user; <userinput>diff -u something.orig something &gt; something.diff</userinput></screen>
@ -68,83 +74,89 @@
<para>В противном случае, вам следует воспользоваться методом <para>В противном случае, вам следует воспользоваться методом
<command>svn diff</command> (<xref linkend="svn-diff"/>), либо <command>svn diff</command> (<xref linkend="svn-diff"/>), либо
скопировать содержимое порта в скопировать содержимое порта в отдельный каталог и применить
отдельный каталог и применить результат рекурсивной команды &man.diff.1; результат рекурсивной команды &man.diff.1; между новым и старым
между новым и старым каталогами порта (например, если каталог с каталогами порта (например, если каталог с модифицированным
модифицированным портом называется <filename>superedit</filename>, портом называется <filename>superedit</filename>, а оригинальный,
а оригинальный, совпадающий с находящимся в нашем дереве портов, совпадающий с находящимся в нашем дереве портов,
<filename>superedit.bak</filename>, то сохраните результат выполнения <filename>superedit.bak</filename>, то сохраните результат
команды <command>diff -ruN superedit.bak superedit</command>). выполнения команды <command>diff -ruN superedit.bak
Подойдёт как унифицированный, так и контекстный дифф, однако коммиттеры superedit</command>). Подойдёт как унифицированный, так и
портов обычно предпочитают унифицированный формат. Отметьте контекстный дифф, однако коммиттеры портов обычно предпочитают
использование опции <literal>-N</literal>&mdash;это одобряемый способ унифицированный формат. Отметьте использование опции
заставить diff корректно работать в случае добавления новых файлов или <literal>-N</literal>&mdash;это одобряемый способ заставить diff
удаления старых. Перед тем, как посылать нам diff-файл, пожалуйста, корректно работать в случае добавления новых файлов или удаления
старых. Перед тем, как посылать нам diff-файл, пожалуйста,
проверьте его, чтобы убедиться в значимости всех внесённых проверьте его, чтобы убедиться в значимости всех внесённых
изменений. (В частности, убедитесь, что вы очистили рабочие каталоги изменений. (В частности, убедитесь, что вы очистили рабочие
командой <command>make clean</command>).</para> каталоги командой <command>make clean</command>).</para>
<para>Для упрощения повторяющихся операций с файлами заплаток <para>Для упрощения повторяющихся операций с файлами заплаток вы
вы можете воспользоваться скриптом можете воспользоваться скриптом
<filename>/usr/ports/Tools/scripts/patchtool.py</filename>. Перед тем, <filename>/usr/ports/Tools/scripts/patchtool.py</filename>.
как его запускать, пожалуйста, прочтите Перед тем, как его запускать, пожалуйста, прочтите
<filename>/usr/ports/Tools/scripts/README.patchtool</filename>.</para> <filename>/usr/ports/Tools/scripts/README.patchtool</filename>.</para>
<para>Если порт никем не поддерживается, а вы активно его используете, <para>Если порт никем не поддерживается, а вы активно его
пожалуйста, подумайте над тем, чтобы добровольно стать его используете, пожалуйста, подумайте над тем, чтобы добровольно
сопровождающим. Во &os; имеется более 4000 портов без поддержки, и это стать его сопровождающим. Во &os; имеется более 4000 портов без
как раз та область, где всегда нужны добровольцы. (Детальное описание поддержки, и это как раз та область, где всегда нужны
обязанностей сопровождающего можно найти в разделе в <link xlink:href="&url.books.developers-handbook;/policies.html#POLICIES-MAINTAINER"> добровольцы. (Детальное описание обязанностей сопровождающего
Руководстве Разработчика</link>.)</para> можно найти в разделе <link
xlink:href="&url.books.developers-handbook;/policies.html#POLICIES-MAINTAINER">Руководства
Разработчика</link>.)</para>
<para>Лучше всего послать нам diff-файл, включив его в посылку по команде <para>Лучше всего послать нам diff-файл, включив его в посылку по
&man.send-pr.1; (категория <literal>ports</literal>). Если вы команде &man.send-pr.1; (категория <literal>ports</literal>).
сопровождаете порт, Если вы сопровождаете порт, обязательно поместите текст
обязательно поместите текст <literal>[maintainer update]</literal> в <literal>[maintainer update]</literal> в начале строки описания и
начале строки описания и задайте в поле <quote>Class</quote> задайте в поле <quote>Class</quote> вашего PR строчку
вашего PR строчку <literal>maintainer-update</literal>. <literal>maintainer-update</literal>. В противном случае в поле
В противном случае в поле <quote>Class</quote> вашего PR должно быть <quote>Class</quote> вашего PR должно быть указано
указано <literal>change-request</literal>. Будьте добры, в сообщении <literal>change-request</literal>. Будьте добры, в сообщении
отметьте все добавленные или удалённые файлы, так как они будут отметьте все добавленные или удалённые файлы, так как они будут
непосредственно указаны &man.svn.1; при выполнении операции коммита. непосредственно указаны &man.svn.1; при выполнении операции
Если diff-файл имеет размер, превышающий 20КБ, сожмите его и обработайте коммита. Если diff-файл имеет размер, превышающий 20КБ, сожмите
утилитой uuencode; в противном случае просто включите его как есть его и обработайте утилитой uuencode; в противном случае просто
в PR.</para> включите его как есть в PR.</para>
<para>Прежде чем пользоваться &man.send-pr.1; просмотрите раздел <para>Прежде чем пользоваться &man.send-pr.1; просмотрите раздел о
о <link xlink:href="&url.articles.problem-reports;/pr-writing.html">Написании <link
сообщений о проблемах</link> в статье о Сообщениях об ошибках. Он xlink:href="&url.articles.problem-reports;/pr-writing.html">Написании
содержит гораздо больше информации о том, как писать полезные сообщения сообщений о проблемах</link> в статье о Сообщениях об ошибках.
о проблемах.</para> Он содержит гораздо больше информации о том, как писать полезные
сообщения о проблемах.</para>
<important> <important>
<para>Если обновление вызвано соображениями информационной <para>Если обновление вызвано соображениями информационной
безопасности или наличием серьёзных ошибок в имеющемся порте, безопасности или наличием серьёзных ошибок в имеющемся порте,
пожалуйста, оповестите &a.portmgr; о необходимости немедленного пожалуйста, оповестите &a.portmgr; о необходимости немедленного
перепостроения и повторного распространения пакета данного порта. перепостроения и повторного распространения пакета данного
В противном случае ничего не подозревающие пользователи порта. В противном случае ничего не подозревающие пользователи
<command>pkg</command> будут продолжать устанавливать старую <command>pkg</command> будут продолжать устанавливать старую
версию по команде <command>pkg install</command> в течение версию по команде <command>pkg install</command> в течение ещё
ещё нескольких недель.</para> нескольких недель.</para>
</important> </important>
<note> <note>
<para>Повторяем еще раз - для посылки обновлений существующих портов <para>Повторяем еще раз - для посылки обновлений существующих
используйте утилиту &man.diff.1;, а не &man.shar.1;! Это поможет портов используйте утилиту &man.diff.1;, а не &man.shar.1;!
понять коммиттерам портов, что именно было изменено.</para> Это поможет понять коммиттерам портов, что именно было
изменено.</para>
</note> </note>
<para>Теперь, когда вы проделали всё это, прочитайте о том, как <para>Теперь, когда вы проделали всё это, прочитайте о том, как
поддерживать актуальное состояние, в <xref linkend="keeping-up"/>.</para> поддерживать актуальное состояние, в <xref
linkend="keeping-up"/>.</para>
<sect1 xml:id="svn-diff"> <sect1 xml:id="svn-diff">
<title>Использование <application>Subversion</application> для <title>Использование <application>Subversion</application> для
создания патчей</title> создания патчей</title>
<para>По возможности присылайте исправления в формате &man.svn.1; diff. <para>По возможности присылайте исправления в формате &man.svn.1;
В таком виде их проще использовать по сравнению с разницей между diff. В таком виде их проще использовать по сравнению с
<quote>старым и новым</quote> каталогами. Так проще разницей между <quote>старым и новым</quote> каталогами. Так
увидеть изменения и обновить их в случае, если что-нибудь проще увидеть изменения и обновить их в случае, если что-нибудь
изменилось в Коллекции Портов с тех пор, как вы начали работу, изменилось в Коллекции Портов с тех пор, как вы начали работу,
либо если коммиттер просит что-то исправить.</para> либо если коммиттер просит что-то исправить.</para>
@ -154,31 +166,34 @@
<calloutlist> <calloutlist>
<callout arearefs="my-wrkdir"> <callout arearefs="my-wrkdir">
<para>Это может быть где угодно; место, в котором производится <para>Это может быть где угодно; место, в котором
построение портов, не привязано к производится построение портов, не привязано к
<filename>/usr/ports/</filename>.</para> <filename>/usr/ports/</filename>.</para>
</callout> </callout>
<callout arearefs="svn-FreeBSD-org"> <callout arearefs="svn-FreeBSD-org">
<para><link xlink:href="https://svn0.us-west.FreeBSD.org/">svn0.us-west.FreeBSD.org</link> <para><link
xlink:href="https://svn0.us-west.FreeBSD.org/">svn0.us-west.FreeBSD.org</link>
&mdash; это общедоступный сервер &mdash; это общедоступный сервер
<application>Subversion</application>. <application>Subversion</application>. Выберите ближайшее
Выберите ближайшее зеркало и проверьте сертификат зеркало и проверьте сертификат зеркалирующего сервера на
зеркалирующего сервера на наличие в перечне <link xlink:href="&url.books.handbook;/svn-mirrors.html">зеркалирующих наличие в перечне <link
xlink:href="&url.books.handbook;/svn-mirrors.html">зеркалирующих
сайтов Subversion</link>.</para> сайтов Subversion</link>.</para>
</callout> </callout>
</calloutlist> </calloutlist>
<para>Находясь в рабочем каталоге, вносите любые изменения, которые <para>Находясь в рабочем каталоге, вносите любые изменения,
обычно делают для порта. При добавлении или удалении файла которые обычно делают для порта. При добавлении или удалении
используйте <command>svn</command> для отслеживания этих файла используйте <command>svn</command> для отслеживания этих
изменений:</para> изменений:</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> &prompt.user; <userinput>svn remove deleted_file</userinput></screen>
<para>Убедитесь, что вы проверяете порт в соответствии с рекомендуемым <para>Убедитесь, что вы проверяете порт в соответствии с
порядком проверки, описанным в <xref linkend="porting-testing"/> и рекомендуемым порядком проверки, описанным в
<xref linkend="porting-testing"/> и
<xref linkend="porting-portlint"/>.</para> <xref linkend="porting-portlint"/>.</para>
<screen>&prompt.user; <userinput>svn status</userinput> <screen>&prompt.user; <userinput>svn status</userinput>
@ -187,42 +202,39 @@
<calloutlist> <calloutlist>
<callout arearefs="svn-update"> <callout arearefs="svn-update">
<para>Эта команда попытается выполнить слияние различий между <para>Эта команда попытается выполнить слияние различий между
вашим патчем и текущей версией репозитория; внимательно проверьте вашим патчем и текущей версией репозитория; внимательно
полученный вывод. Буква перед названием каждого файла означает проверьте полученный вывод. Буква перед названием каждого
тип изменения, сделанного с этим файлом. Для получения полного файла означает тип изменения, сделанного с этим файлом.
списка смотрите <xref linkend="table-svn-up"/>.</para> Для получения полного списка смотрите <xref
linkend="table-svn-up"/>.</para>
</callout> </callout>
</calloutlist> </calloutlist>
<table pgwide="1" frame="none" xml:id="table-svn-up"> <table pgwide="1" frame="none" xml:id="table-svn-up">
<title>Префиксы файлов для <application>Subversion</application> <title>Префиксы файлов для
update</title> <application>Subversion</application> Update</title>
<tgroup cols="2"> <tgroup cols="2">
<tbody> <tbody>
<row> <row>
<entry>U</entry> <entry>U</entry>
<entry>Файл обновлен без проблем.</entry> <entry>Файл обновлен без проблем.</entry>
</row> </row>
<row> <row>
<entry>G</entry> <entry>G</entry>
<entry>Файл обновлен без проблем (вы увидите это только <entry>Файл обновлен без проблем (вы увидите это только
при работе с удаленным репозиторием).</entry> при работе с удаленным репозиторием).</entry>
</row> </row>
<row> <row>
<entry>M</entry> <entry>M</entry>
<entry>Файл с локальными изменениями, слияние выполнено <entry>Файл с локальными изменениями, слияние выполнено
без конфликтов.</entry> без конфликтов.</entry>
</row> </row>
<row> <row>
<entry>C</entry> <entry>C</entry>
<entry>Файл с локальными изменениями, слияние выполнено <entry>Файл с локальными изменениями, слияние выполнено
с конфликтами.</entry> с конфликтами.</entry>
</row> </row>
@ -233,15 +245,15 @@
<para>Если в результате выполнения <literal>svn update</literal> <para>Если в результате выполнения <literal>svn update</literal>
отображается <literal>C</literal>, то это означает, что что-то отображается <literal>C</literal>, то это означает, что что-то
изменилось в репозитории <application>Subversion</application> изменилось в репозитории <application>Subversion</application>
и &man.svn.1; не смогла выполнить и &man.svn.1; не смогла выполнить слияние локальных изменений с
слияние локальных изменений с полученными из репозитория. полученными из репозитория. В любом случае никогда не помешает
В любом случае никогда не помешает просмотреть изменения, просмотреть изменения, поскольку &man.svn.1; ничего не знает о
поскольку &man.svn.1; ничего не знает о том, каким должен быть том, каким должен быть порт, поэтому эта команда может (и,
порт, поэтому эта команда может (и, вероятно, будет) делать вероятно, будет) делать слияние тех изменений, которые не имеют
слияние тех изменений, которые не имеют смысла.</para> смысла.</para>
<para>Последним шагом является создание унифицированного &man.diff.1; <para>Последним шагом является создание унифицированного
для полученных изменений:</para> &man.diff.1; для полученных изменений:</para>
<screen>&prompt.user; <userinput>svn diff &gt; ../`basename ${PWD}`.diff</userinput></screen> <screen>&prompt.user; <userinput>svn diff &gt; ../`basename ${PWD}`.diff</userinput></screen>
@ -251,17 +263,17 @@
файла для коммиттера может быть неочевидна.</para> файла для коммиттера может быть неочевидна.</para>
</note> </note>
<para>Присылайте свои патчи в соответствии с руководством, описанном в <para>Присылайте свои патчи в соответствии с руководством,
<xref linkend="port-upgrading"/>.</para> описанном в <xref linkend="port-upgrading"/>.</para>
</sect1> </sect1>
<sect1 xml:id="moved-and-updating-files"> <sect1 xml:id="moved-and-updating-files">
<title>Файлы <filename>UPDATING</filename> и <title>Файлы <filename>UPDATING</filename> и
<filename>MOVED</filename></title> <filename>MOVED</filename></title>
<para>Если при обновлении порта требуются специальные шаги, такие как <para>Если при обновлении порта требуются специальные шаги, такие
изменение файлов конфигурации или запуск специальной программы, как изменение файлов конфигурации или запуск специальной
то вам следует это задокументировать в файле программы, то вам следует это задокументировать в файле
<filename>/usr/ports/UPDATING</filename>. Формат записи в этом <filename>/usr/ports/UPDATING</filename>. Формат записи в этом
файле приводится ниже:</para> файле приводится ниже:</para>
@ -271,23 +283,23 @@
Special instructions</programlisting> Special instructions</programlisting>
<para>Если вы включаете точные инструкции portmaster или portupgrading, <para>Если вы включаете точные инструкции portmaster или
пожалуйста, убедитесь в правильном экранировании символов внутри portupgrade, пожалуйста, убедитесь в правильном экранировании
командной оболочки.</para> символов внутри командной оболочки.</para>
<para>Файл <filename>/usr/ports/MOVED</filename> содержит записи <para>Файл <filename>/usr/ports/MOVED</filename> содержит записи
об удалённых или перемещённых портах. Каждая строка в этом об удалённых или перемещённых портах. Каждая строка в этом
файле состоит из полей: название порта, место, куда он был файле состоит из полей: название порта, место, куда он был
перемещён, дата и причина перемещения. Если порт был удалён, перемещён, дата и причина перемещения. Если порт был удалён,
то поле, указывающее новое место, может оставаться незаполненным. то поле, указывающее новое место, может оставаться
Поля должны разделяться символом <literal>|</literal> (pipe), незаполненным. Поля должны разделяться символом
как это показано ниже:</para> <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>Дату следует вводить в формате
Новые записи следует добавлять в конец файла в хронологическом <literal>YYYY-MM-DD</literal>. Новые записи следует добавлять
порядке.</para> в конец файла в хронологическом порядке.</para>
<para>Если порт был перемещён, но в дальнейшем восстановлен на <para>Если порт был перемещён, но в дальнейшем восстановлен на
прежнем месте, удалите в этом файле строку, содержащую прежнем месте, удалите в этом файле строку, содержащую
@ -297,4 +309,3 @@
<command>Tools/scripts/MOVEDlint.awk</command>.</para> <command>Tools/scripts/MOVEDlint.awk</command>.</para>
</sect1> </sect1>
</chapter> </chapter>

View file

@ -156,14 +156,15 @@
<entry>(ÎÅÔ), ARGS</entry> <entry>(ÎÅÔ), ARGS</entry>
<entry>Устанавливает окружение виртуального дисплея. Если переменная <entry>Устанавливает окружение виртуального дисплея. Если
окружения <varname>DISPLAY</varname> не установлена, то переменная окружения <varname>DISPLAY</varname> не установлена,
<application>Xvfb</application> добавляется как зависимость для то <application>Xvfb</application> добавляется как зависимость
построения и <varname>CONFIGURE_ENV</varname> дополняется номером для построения и <varname>CONFIGURE_ENV</varname> дополняется
порта текущего запущенного экземпляра <application>Xvfb</application>. номером порта текущего запущенного экземпляра
Параметр <literal>ARGS</literal> по умолчанию имеет значение <application>Xvfb</application>. Параметр
<literal>install</literal> и управляет фазой, в которой запускается <literal>ARGS</literal> по умолчанию имеет значение
и останавливается виртуальный дисплей.</entry> <literal>install</literal> и управляет фазой, в которой
запускается и останавливается виртуальный дисплей.</entry>
</row> </row>
<row xml:id="uses-dos2unix"> <row xml:id="uses-dos2unix">
@ -218,7 +219,8 @@
<row xml:id="uses-fortran"> <row xml:id="uses-fortran">
<entry><literal>fortran</literal></entry> <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> <entry>éÓÐÏÌØÚÕÅÔ ËÏÍÐÉÌÑÔÏÒ Fortran ÏÔ GNU ÉÌÉ Intel.</entry>
</row> </row>
@ -265,8 +267,8 @@
<entry>éÓÐÏÌØÚÕÅÔ ÆÕÎËÃÉÉ <command>iconv</command>, ÉÚ ÐÏÒÔÁ <entry>éÓÐÏÌØÚÕÅÔ ÆÕÎËÃÉÉ <command>iconv</command>, ÉÚ ÐÏÒÔÁ
<package role="port">converters/libiconv</package> ËÁË ÚÁ×ÉÓÉÍÏÓÔØ <package role="port">converters/libiconv</package> ËÁË ÚÁ×ÉÓÉÍÏÓÔØ
для сборки и выполнения или же из основной системы на 10-CURRENT после для сборки и выполнения или же из основной системы на 10-CURRENT
появления собственного <command>iconv</command> в после появления собственного <command>iconv</command> в
<revnumber>254273</revnumber>. ðÏ ÕÍÏÌÞÁÎÉÀ, ÂÅÚ ÐÁÒÁÍÅÔÒÏ× ÉÌÉ <revnumber>254273</revnumber>. ðÏ ÕÍÏÌÞÁÎÉÀ, ÂÅÚ ÐÁÒÁÍÅÔÒÏ× ÉÌÉ
Ó ÐÁÒÁÍÅÔÒÏÍ <literal>lib</literal>, <command>iconv</command> Ó ÐÁÒÁÍÅÔÒÏÍ <literal>lib</literal>, <command>iconv</command>
ÏÚÎÁÞÁÅÔ ÚÁ×ÉÓÉÍÏÓÔØ ÄÌÑ ÓÂÏÒËÉ É ×ÙÐÏÌÎÅÎÉÑ, ÏÚÎÁÞÁÅÔ ÚÁ×ÉÓÉÍÏÓÔØ ÄÌÑ ÓÂÏÒËÉ É ×ÙÐÏÌÎÅÎÉÑ,
@ -393,15 +395,16 @@
<row xml:id="uses-openal"> <row xml:id="uses-openal">
<entry><literal>openal</literal></entry> <entry><literal>openal</literal></entry>
<entry><literal>al</literal>, <literal>soft</literal> (по умолчанию), <entry><literal>al</literal>, <literal>soft</literal> (по
<literal>si</literal>, <literal>alut</literal></entry> умолчанию), <literal>si</literal>, <literal>alut</literal></entry>
<entry>éÓÐÏÌØÚÕÅÔ <application>OpenAL</application>. íÏÖÅÔ ÂÙÔØ <entry>éÓÐÏÌØÚÕÅÔ <application>OpenAL</application>. íÏÖÅÔ ÂÙÔØ
ÕËÁÚÁÎ ÂÜËÜÎÄ, ÐÏ ÕÍÏÌÞÁÎÉÀ ÉÓÐÏÌØÚÕÅÔÓÑ ÐÒÏÇÒÁÍÍÎÁÑ ÒÅÁÌÉÚÁÃÉÑ. ÕËÁÚÁÎ ÂÜËÜÎÄ, ÐÏ ÕÍÏÌÞÁÎÉÀ ÉÓÐÏÌØÚÕÅÔÓÑ ÐÒÏÇÒÁÍÍÎÁÑ ÒÅÁÌÉÚÁÃÉÑ.
ðÏÌØÚÏ×ÁÔÅÌØ ÍÏÖÅÔ ÕËÁÚÁÔØ ÐÒÅÄÐÏÞÉÔÁÅÍÙÊ ÂÜËÜÎÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ ðÏÌØÚÏ×ÁÔÅÌØ ÍÏÖÅÔ ÕËÁÚÁÔØ ÐÒÅÄÐÏÞÉÔÁÅÍÙÊ ÂÜËÜÎÄ Ó ÉÓÐÏÌØÚÏ×ÁÎÉÅÍ
ÐÅÒÅËÌÀÞÁÔÅÌÑ <varname>WANT_OPENAL</varname>. ðÒÁ×ÉÌØÎÙÍÉ ÐÅÒÅËÌÀÞÁÔÅÌÑ <varname>WANT_OPENAL</varname>. ðÒÁ×ÉÌØÎÙÍÉ
значениями для этого переключателя являются <literal>soft</literal> значениями для этого переключателя являются
(по умолчанию) и <literal>si</literal>.</entry> <literal>soft</literal> (по умолчанию) и
<literal>si</literal>.</entry>
</row> </row>
<row xml:id="uses-pathfix"> <row xml:id="uses-pathfix">
@ -567,8 +570,8 @@
ÉÚ <package role="port">misc/shared-mime-info</package>. üÔÏ ÉÚ <package role="port">misc/shared-mime-info</package>. üÔÏ
ÔÁËÖÅ ÄÏÂÁ×ÌÑÅÔ ÓÏÂÓÔ×ÅÎÎÙÊ ÜÔÁÐ post-install É ÓÔÒÏËÉ × plist ÔÁËÖÅ ÄÏÂÁ×ÌÑÅÔ ÓÏÂÓÔ×ÅÎÎÙÊ ÜÔÁÐ post-install É ÓÔÒÏËÉ × plist
ÄÌÑ ÚÁÐÕÓËÁ <application>update-mime-data</application> Ó ÄÌÑ ÚÁÐÕÓËÁ <application>update-mime-data</application> Ó
подходящими аргументами во время установки и удаления пакета. подходящими аргументами во время установки и удаления
</entry> пакета.</entry>
</row> </row>
<row xml:id="uses-shebangfix"> <row xml:id="uses-shebangfix">
@ -578,16 +581,19 @@
<entry>÷Ï ÍÎÏÇÏÍ ÐÒÏÇÒÁÍÍÎÏÍ ÏÂÅÓÐÅÞÅÎÉÉ ÕËÁÚÙ×ÁÅÔÓÑ ÎÅÐÒÁ×ÉÌØÎÙÊ <entry>÷Ï ÍÎÏÇÏÍ ÐÒÏÇÒÁÍÍÎÏÍ ÏÂÅÓÐÅÞÅÎÉÉ ÕËÁÚÙ×ÁÅÔÓÑ ÎÅÐÒÁ×ÉÌØÎÙÊ
ÐÕÔØ Ë ÉÎÔÅÒÐÒÅÔÁÔÏÒÕ (shebang), × ÐÅÒ×ÕÀ ÏÞÅÒÅÄØ ÜÔÏ ËÁÓÁÅÔÓÑ ÐÕÔØ Ë ÉÎÔÅÒÐÒÅÔÁÔÏÒÕ (shebang), × ÐÅÒ×ÕÀ ÏÞÅÒÅÄØ ÜÔÏ ËÁÓÁÅÔÓÑ
<filename>/usr/bin/perl</filename> и <filename>/bin/bash</filename>. <filename>/usr/bin/perl</filename> и
Это значение исправляет строку shebang в сценариях, перечисленных <filename>/bin/bash</filename>. Это значение исправляет строку
в <varname>SHEBANG_FILES</varname>. По умолчанию сейчас shebang в сценариях, перечисленных в
<varname>SHEBANG_FILES</varname>. По умолчанию сейчас
ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ <application>Perl</application>, ÐÏÄÄÅÒÖÉ×ÁÀÔÓÑ <application>Perl</application>,
<application>Python</application>, <application>Bash</application>, <application>Python</application>,
<application>Ruby</application> и <application>PHP</application>. <application>Bash</application>, <application>Ruby</application>
Для поддержки других интерпретаторов необходимо соответствующее и <application>PHP</application>. Для поддержки других
значение <varname>SHEBANG_LANG</varname> (например, интерпретаторов необходимо соответствующее значение
<varname>SHEBANG_LANG</varname> (например,
<literal>SHEBANG_LANG=lua</literal>), <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>
<row xml:id="uses-tcl"> <row xml:id="uses-tcl">
@ -606,10 +612,10 @@
<literal>86</literal>) ÉÌÉ ÖÅ ÍÉÎÉÍÁÌØÎÙÊ ÎÏÍÅÒ ×ÅÒÓÉÉ (ÎÁ ÄÁÎÎÙÊ <literal>86</literal>) ÉÌÉ ÖÅ ÍÉÎÉÍÁÌØÎÙÊ ÎÏÍÅÒ ×ÅÒÓÉÉ (ÎÁ ÄÁÎÎÙÊ
ÍÏÍÅÎÔ <literal>84+</literal>, <literal>85+</literal> ÉÌÉ ÍÏÍÅÎÔ <literal>84+</literal>, <literal>85+</literal> ÉÌÉ
<literal>86+</literal>). íÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎÁ ÚÁ×ÉÓÉÍÏÓÔØ ÄÌÑ <literal>86+</literal>). íÏÖÅÔ ÂÙÔØ ÕËÁÚÁÎÁ ÚÁ×ÉÓÉÍÏÓÔØ ÄÌÑ
сборки или выполнения с использованием <literal>PORT,build</literal> сборки или выполнения с использованием
или <literal>PORT,run</literal>. После подключения <literal>PORT,build</literal> или <literal>PORT,run</literal>.
<filename>bsd.port.pre.mk</filename> порт может проверить После подключения <filename>bsd.port.pre.mk</filename> порт может
результат, используя эти переменные: проверить результат, используя эти переменные:
<itemizedlist> <itemizedlist>
<listitem> <listitem>
@ -670,22 +676,22 @@
<entry>(ÎÅÔ), <literal>ARGS</literal></entry> <entry>(ÎÅÔ), <literal>ARGS</literal></entry>
<entry>Добавляет зависимость от <application>twistedCore</application>. <entry>Добавляет зависимость от
Перечень требуемых компонентов можно указать в качестве значения <application>twistedCore</application>. Перечень требуемых
этой переменной. <literal>ARGS</literal> может принимать одно из компонентов можно указать в качестве значения этой переменной.
значений: <literal>ARGS</literal> может принимать одно из значений:
<itemizedlist> <itemizedlist>
<listitem> <listitem>
<para><literal>build</literal>: ÄÏÂÁ×ÌÑÅÔ <para><literal>build</literal>: ÄÏÂÁ×ÌÑÅÔ
<application>twistedCore</application> или любой из указанных <application>twistedCore</application> или любой из
компонентов как зависимость построения.</para> указанных компонентов как зависимость построения.</para>
</listitem> </listitem>
<listitem> <listitem>
<para><literal>run</literal>: ÄÏÂÁ×ÌÑÅÔ <para><literal>run</literal>: ÄÏÂÁ×ÌÑÅÔ
<application>twistedCore</application> или любой из указанных <application>twistedCore</application> или любой из
компонентов как зависимость запуска.</para> указанных компонентов как зависимость запуска.</para>
</listitem> </listitem>
</itemizedlist> </itemizedlist>

View file

@ -861,8 +861,8 @@
<entry>500018</entry> <entry>500018</entry>
<entry>24 ÆÅ×ÒÁÌÑ 2001</entry> <entry>24 ÆÅ×ÒÁÌÑ 2001</entry>
<entry>5.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÐÅÒÅÍÅÎÎÏÊ make CPUTYPE, <entry>5.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÐÅÒÅÍÅÎÎÏÊ make CPUTYPE,
ÐÏÚ×ÏÌÑÀÝÅÊ ËÏÎÔÒÏÌÉÒÏ×ÁÔØ ÓÐÅÃÉÆÉÞÎÙÅ ÄÌÑ CPU ÏÐÔÉÍÉÚÁÃÉÉ. ÐÏÚ×ÏÌÑÀÝÅÊ ËÏÎÔÒÏÌÉÒÏ×ÁÔØ ÓÐÅÃÉÆÉÞÎÙÅ ÄÌÑ CPU
</entry> ÏÐÔÉÍÉÚÁÃÉÉ.</entry>
</row> </row>
<row> <row>
@ -1363,8 +1363,7 @@
<row> <row>
<entry>502114</entry> <entry>502114</entry>
<entry>13 ÉÀÎÑ 2004</entry> <entry>13 ÉÀÎÑ 2004</entry>
<entry>5.2-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ ALTQ ÉÎÆÒÁÓÔÒÕËÔÕÒÙ. <entry>5.2-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ ALTQ ÉÎÆÒÁÓÔÒÕËÔÕÒÙ.</entry>
</entry>
</row> </row>
<row> <row>
@ -1458,16 +1457,16 @@
<entry>502127</entry> <entry>502127</entry>
<entry>2 Á×ÇÕÓÔÁ 2004</entry> <entry>2 Á×ÇÕÓÔÁ 2004</entry>
<entry>5.2-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × API ÑÄÒÁ UMA, ÒÁÚÒÅÛÁÀÝÅÇÏ <entry>5.2-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × API ÑÄÒÁ UMA, ÒÁÚÒÅÛÁÀÝÅÇÏ
ËÏÎÓÔÒÕËÔÏÒÁÍ/ÉÎÉÃÉÁÌÉÚÁÔÏÒÁÍ (ctors/inits) ×ÏÚ×ÒÁÝÁÔØ ÎÅÕÄÁÞÕ. ËÏÎÓÔÒÕËÔÏÒÁÍ/ÉÎÉÃÉÁÌÉÚÁÔÏÒÁÍ (ctors/inits) ×ÏÚ×ÒÁÝÁÔØ
</entry> ÎÅÕÄÁÞÕ.</entry>
</row> </row>
<row> <row>
<entry>502128</entry> <entry>502128</entry>
<entry>8 Á×ÇÕÓÔÁ 2004</entry> <entry>8 Á×ÇÕÓÔÁ 2004</entry>
<entry>5.2-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × ÓÉÇÎÁÔÕÒÅ vfs_mount, Á ÔÁËÖÅ <entry>5.2-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × ÓÉÇÎÁÔÕÒÅ vfs_mount, Á ÔÁËÖÅ
ÐÏÓÌÅ ÏÂÝÅÊ ÚÁÍÅÎÙ PRISON_ROOT ÎÁ SUSER_ALLOWJAIL × API suser(9). ÐÏÓÌÅ ÏÂÝÅÊ ÚÁÍÅÎÙ PRISON_ROOT ÎÁ SUSER_ALLOWJAIL × API
</entry> suser(9).</entry>
</row> </row>
<row> <row>
@ -1498,8 +1497,8 @@
<row> <row>
<entry>503102</entry> <entry>503102</entry>
<entry>13 ÆÅ×ÒÁÌÑ 2005</entry> <entry>13 ÆÅ×ÒÁÌÑ 2005</entry>
<entry>5.3-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÉÍÐÏÒÔÁ nc(1) ÉÚ OpenBSD. <entry>5.3-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÉÍÐÏÒÔÁ nc(1) ÉÚ
</entry> OpenBSD.</entry>
</row> </row>
<row> <row>
@ -1592,8 +1591,8 @@
<row> <row>
<entry>600001</entry> <entry>600001</entry>
<entry>27 Á×ÇÕÓÔÁ 2004</entry> <entry>27 Á×ÇÕÓÔÁ 2004</entry>
<entry>6.0-CURRENT ÐÏÓÌÅ ÐÏÓÔÏÑÎÎÏÇÏ ×ËÌÀÞÅÎÉÑ × ÑÄÒÏ PFIL_HOOKS. <entry>6.0-CURRENT ÐÏÓÌÅ ÐÏÓÔÏÑÎÎÏÇÏ ×ËÌÀÞÅÎÉÑ × ÑÄÒÏ
</entry> PFIL_HOOKS.</entry>
</row> </row>
<row> <row>
@ -1679,8 +1678,8 @@
<entry>6.0-CURRENT ÐÏÓÌÅ ÉÓÐÒÁ×ÌÅÎÉÊ × <entry>6.0-CURRENT ÐÏÓÌÅ ÉÓÐÒÁ×ÌÅÎÉÊ ×
<filename>&lt;src/include/stdbool.h&gt;</filename> É <filename>&lt;src/include/stdbool.h&gt;</filename> É
<filename>&lt;src/sys/i386/include/_types.h&gt;</filename> <filename>&lt;src/sys/i386/include/_types.h&gt;</filename>
ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ GCC × ËÏÍÐÉÌÑÔÏÒÅ Intel C/C++. ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ GCC × ËÏÍÐÉÌÑÔÏÒÅ Intel
</entry> C/C++.</entry>
</row> </row>
<row> <row>
@ -1941,8 +1940,8 @@
<entry>602104</entry> <entry>602104</entry>
<entry>28 ÑÎ×ÁÒÑ 2007</entry> <entry>28 ÑÎ×ÁÒÑ 2007</entry>
<entry>6.2-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÕÚÌÏ× netgraph ng_deflate(4) <entry>6.2-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÕÚÌÏ× netgraph ng_deflate(4)
É ng_pred1(4) É ÎÏ×ÏÇÏ ÕÚÌÁ ng_ppp(4) ÓÏ ÓÖÁÔÉÅÍ É ÛÉÆÒÏ×ÁÎÉÅÍ. É ng_pred1(4) É ÎÏ×ÏÇÏ ÕÚÌÁ ng_ppp(4) ÓÏ ÓÖÁÔÉÅÍ É
</entry> ÛÉÆÒÏ×ÁÎÉÅÍ.</entry>
</row> </row>
<row> <row>
@ -2047,8 +2046,8 @@
<row> <row>
<entry>603102</entry> <entry>603102</entry>
<entry>24 ÁÐÒÅÌÑ 2008</entry> <entry>24 ÁÐÒÅÌÑ 2008</entry>
<entry>6.3-STABLE ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ l_sysid Ë ÓÔÒÕËÔÕÒÅ flock. <entry>6.3-STABLE ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ l_sysid Ë ÓÔÒÕËÔÕÒÅ
</entry> flock.</entry>
</row> </row>
<row> <row>
@ -2193,8 +2192,8 @@
<row> <row>
<entry>700016</entry> <entry>700016</entry>
<entry>22 ÁÐÒÅÌÑ 2006</entry> <entry>22 ÁÐÒÅÌÑ 2006</entry>
<entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ &man.fcloseall.3; × libc. <entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ &man.fcloseall.3; ×
</entry> libc.</entry>
</row> </row>
<row> <row>
@ -2224,8 +2223,8 @@
<row> <row>
<entry>700021</entry> <entry>700021</entry>
<entry>4 ÓÅÎÔÑÂÒÑ 2006</entry> <entry>4 ÓÅÎÔÑÂÒÑ 2006</entry>
<entry>7.0-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ libpcap 0.9.4 É tcpdump 3.9.4. <entry>7.0-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ libpcap 0.9.4 É tcpdump
</entry> 3.9.4.</entry>
</row> </row>
<row> <row>
@ -2290,15 +2289,14 @@
<row> <row>
<entry>700031</entry> <entry>700031</entry>
<entry>23 ÆÅ×ÒÁÌÑ 2007</entry> <entry>23 ÆÅ×ÒÁÌÑ 2007</entry>
<entry>7.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × bus_setup_intr() (newbus). <entry>7.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × bus_setup_intr()
</entry> (newbus).</entry>
</row> </row>
<row> <row>
<entry>700032</entry> <entry>700032</entry>
<entry>2 ÍÁÒÔÁ 2007</entry> <entry>2 ÍÁÒÔÁ 2007</entry>
<entry>7.0-CURRENT ÐÏÓÌÅ ×ÎÅÓÅÎÉÑ ÍÉËÒÏËÏÄÁ ipw(4) É iwi(4). <entry>7.0-CURRENT ÐÏÓÌÅ ×ÎÅÓÅÎÉÑ ÍÉËÒÏËÏÄÁ ipw(4) É iwi(4).</entry>
</entry>
</row> </row>
<row> <row>
@ -2319,8 +2317,7 @@
<entry>700035</entry> <entry>700035</entry>
<entry>26 ÍÁÒÔÁ 2007</entry> <entry>26 ÍÁÒÔÁ 2007</entry>
<entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÍÅÈÁÎÉÚÍÁ Õ×ÅÄÏÍÌÅÎÉÊ <entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÍÅÈÁÎÉÚÍÁ Õ×ÅÄÏÍÌÅÎÉÊ
ÐÒÉ ÉÚÍÅÎÅÎÉÉ ÞÁÓÔÏÔÙ CPU. ÐÒÉ ÉÚÍÅÎÅÎÉÉ ÞÁÓÔÏÔÙ CPU.</entry>
</entry>
</row> </row>
<row> <row>
@ -2341,8 +2338,8 @@
<entry>700038</entry> <entry>700038</entry>
<entry>30 ÁÐÒÅÌÑ 2007</entry> <entry>30 ÁÐÒÅÌÑ 2007</entry>
<entry>7.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ &man.getenv.3;, &man.putenv.3;, <entry>7.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ &man.getenv.3;, &man.putenv.3;,
&man.setenv.3; É &man.unsetenv.3; ÄÌÑ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ Ó POSIX. &man.setenv.3; É &man.unsetenv.3; ÄÌÑ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ Ó
</entry> POSIX.</entry>
</row> </row>
<row> <row>
@ -2354,8 +2351,8 @@
<row> <row>
<entry>700040</entry> <entry>700040</entry>
<entry>10 ÍÁÑ 2007</entry> <entry>10 ÍÁÑ 2007</entry>
<entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ &man.flopen.3; × libutil. <entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ &man.flopen.3; ×
</entry> libutil.</entry>
</row> </row>
<row> <row>
@ -2457,8 +2454,8 @@
<row> <row>
<entry>700053</entry> <entry>700053</entry>
<entry>30 ÓÅÎÔÑÂÒÑ 2007</entry> <entry>30 ÓÅÎÔÑÂÒÑ 2007</entry>
<entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÐÏÄÄÅÒÖËÉ ÄÌÑ ÄÏÍÅÎÏ× PCI. <entry>7.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÐÏÄÄÅÒÖËÉ ÄÌÑ ÄÏÍÅÎÏ×
</entry> PCI.</entry>
</row> </row>
<row> <row>
@ -2498,8 +2495,8 @@
<row> <row>
<entry>700103</entry> <entry>700103</entry>
<entry>10 ÁÐÒÅÌÑ 2008</entry> <entry>10 ÁÐÒÅÌÑ 2008</entry>
<entry>7.0-STABLE ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ l_sysid × ÓÔÒÕËÔÕÒÕ flock. <entry>7.0-STABLE ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ l_sysid × ÓÔÒÕËÔÕÒÕ
</entry> flock.</entry>
</row> </row>
<row> <row>
@ -2559,8 +2556,8 @@
<row> <row>
<entry>700112</entry> <entry>700112</entry>
<entry>27 Á×ÇÕÓÔÁ 2008</entry> <entry>27 Á×ÇÕÓÔÁ 2008</entry>
<entry>7.0-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÐÏÄÄÅÒÖËÉ DTrace × ÑÄÒÅ. <entry>7.0-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÐÏÄÄÅÒÖËÉ DTrace ×
</entry> ÑÄÒÅ.</entry>
</row> </row>
<row> <row>
@ -2578,8 +2575,8 @@
<row> <row>
<entry>701101</entry> <entry>701101</entry>
<entry>10 ÑÎ×ÁÒÑ 2009</entry> <entry>10 ÑÎ×ÁÒÑ 2009</entry>
<entry>7.1-STABLE ÐÏÓÌÅ ÂÅËÐÏÒÔÁ <function>strndup</function>. <entry>7.1-STABLE ÐÏÓÌÅ ÂÅËÐÏÒÔÁ
</entry> <function>strndup</function>.</entry>
</row> </row>
<row> <row>
@ -2662,8 +2659,8 @@
<row> <row>
<entry>702105</entry> <entry>702105</entry>
<entry>31 ÉÀÌÑ 2009</entry> <entry>31 ÉÀÌÑ 2009</entry>
<entry>7.2-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÉÚÍÅÎÅÎÉÑ ABI ÄÌÑ SYSVIPC. <entry>7.2-STABLE ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC ÉÚÍÅÎÅÎÉÑ ABI ÄÌÑ
</entry> SYSVIPC.</entry>
</row> </row>
<row> <row>
@ -2701,15 +2698,15 @@
<row> <row>
<entry>800000</entry> <entry>800000</entry>
<entry>11 ÏËÔÑÂÒÑ 2007</entry> <entry>11 ÏËÔÑÂÒÑ 2007</entry>
<entry>8.0-CURRENT. òÁÚÄÅÌÅÎÉÅ Ä×ÕÈÂÁÊÔÏ×ÙÈ É ÏÄÎÏÂÁÊÔÏ×ÙÈ ctype. <entry>8.0-CURRENT. òÁÚÄÅÌÅÎÉÅ Ä×ÕÈÂÁÊÔÏ×ÙÈ É ÏÄÎÏÂÁÊÔÏ×ÙÈ
</entry> ctype.</entry>
</row> </row>
<row> <row>
<entry>800001</entry> <entry>800001</entry>
<entry>16 ÏËÔÑÂÒÑ 2007</entry> <entry>16 ÏËÔÑÂÒÑ 2007</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ libpcap 0.9.8 É tcpdump 3.9.8. <entry>8.0-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ libpcap 0.9.8 É tcpdump
</entry> 3.9.8.</entry>
</row> </row>
<row> <row>
@ -2724,8 +2721,8 @@
<entry>24 ÏËÔÑÂÒÑ 2007</entry> <entry>24 ÏËÔÑÂÒÑ 2007</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÏÂÒÁÔÎÏÊ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ ABI ÄÌÑ <entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÏÂÒÁÔÎÏÊ ÓÏ×ÍÅÓÔÉÍÏÓÔÉ ABI ÄÌÑ
IOCTL'ÅÊ PCIOCGETCONF, PCIOCREAD É PCIOCWRITE Ó ×ÅÒÓÉÑÍÉ FreeBSD IOCTL'ÅÊ PCIOCGETCONF, PCIOCREAD É PCIOCWRITE Ó ×ÅÒÓÉÑÍÉ FreeBSD
4/5/6, ÞÔÏ ×ÙÚ×ÁÌÏ ÐÏ×ÔÏÒÎÕÀ ÐÏÌÏÍËÕ ABI ÄÌÑ PCIOCGETCONF IOCTL 4/5/6, ÞÔÏ ×ÙÚ×ÁÌÏ ÐÏ×ÔÏÒÎÕÀ ÐÏÌÏÍËÕ ABI ÄÌÑ PCIOCGETCONF
</entry> IOCTL</entry>
</row> </row>
<row> <row>
@ -2771,8 +2768,8 @@
<row> <row>
<entry>800010</entry> <entry>800010</entry>
<entry>10 ÑÎ×ÁÒÑ 2008</entry> <entry>10 ÑÎ×ÁÒÑ 2008</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÐÒÏÔÏÔÉÐÁ &man.vn.lock.9;. <entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÐÒÏÔÏÔÉÐÁ
</entry> &man.vn.lock.9;.</entry>
</row> </row>
<row> <row>
@ -2793,8 +2790,8 @@
<row> <row>
<entry>800013</entry> <entry>800013</entry>
<entry>23 ÑÎ×ÁÒÑ 2008</entry> <entry>23 ÑÎ×ÁÒÑ 2008</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ËÏÄÉÒÏ×ËÉ <quote>ASCII</quote>. <entry>8.0-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ËÏÄÉÒÏ×ËÉ
</entry> <quote>ASCII</quote>.</entry>
</row> </row>
<row> <row>
@ -2808,8 +2805,8 @@
<row> <row>
<entry>800015</entry> <entry>800015</entry>
<entry>26 ÑÎ×ÁÒÑ 2008</entry> <entry>26 ÑÎ×ÁÒÑ 2008</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÒÁÓÛÉÒÅÎÉÑ ÔÉÐÏ× ÄÌÑ ÓÔÒÕËÔÕÒ &man.fts.3;. <entry>8.0-CURRENT ÐÏÓÌÅ ÒÁÓÛÉÒÅÎÉÑ ÔÉÐÏ× ÄÌÑ ÓÔÒÕËÔÕÒ
</entry> &man.fts.3;.</entry>
</row> </row>
<row> <row>
@ -2889,8 +2886,8 @@
<entry>800026</entry> <entry>800026</entry>
<entry>12 ÍÁÒÔÁ 2008</entry> <entry>12 ÍÁÒÔÁ 2008</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÐÁÒÁÍÅÔÒÁ ÐÒÉÏÒÉÔÅÔÁ ÄÌÑ <entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÐÁÒÁÍÅÔÒÁ ÐÒÉÏÒÉÔÅÔÁ ÄÌÑ
cv_broadcastpri ÔÁË, ÞÔÏ 0 ÏÚÎÁÞÁÅÔ ÏÔÓÕÔÓÔ×ÉÅ ÐÒÉÏÒÉÔÅÔÁ. cv_broadcastpri ÔÁË, ÞÔÏ 0 ÏÚÎÁÞÁÅÔ ÏÔÓÕÔÓÔ×ÉÅ
</entry> ÐÒÉÏÒÉÔÅÔÁ.</entry>
</row> </row>
<row> <row>
@ -2903,8 +2900,8 @@
<row> <row>
<entry>800028</entry> <entry>800028</entry>
<entry>26 ÍÁÒÔÁ 2008</entry> <entry>26 ÍÁÒÔÁ 2008</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ l_sysid × ÓÔÒÕËÔÕÒÕ flock. <entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ l_sysid × ÓÔÒÕËÔÕÒÕ
</entry> flock.</entry>
</row> </row>
<row> <row>
@ -3012,8 +3009,8 @@
<entry>800043</entry> <entry>800043</entry>
<entry>13 Á×ÇÕÓÔÁ 2008</entry> <entry>13 Á×ÇÕÓÔÁ 2008</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × bpf(4) ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ <entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ × bpf(4) ÄÌÑ ÉÓÐÏÌØÚÏ×ÁÎÉÑ
ÅÄÉÎÓÔ×ÅÎÎÏÇÏ ÕÚÌÁ ÕÓÔÒÏÊÓÔ×Á ×ÍÅÓÔÏ ËÌÏÎÉÒÏ×ÁÎÉÑ ÕÓÔÒÏÊÓÔ×. ÅÄÉÎÓÔ×ÅÎÎÏÇÏ ÕÚÌÁ ÕÓÔÒÏÊÓÔ×Á ×ÍÅÓÔÏ ËÌÏÎÉÒÏ×ÁÎÉÑ
</entry> ÕÓÔÒÏÊÓÔ×.</entry>
</row> </row>
<row> <row>
@ -3128,8 +3125,8 @@
<row> <row>
<entry>800059</entry> <entry>800059</entry>
<entry>15 ÄÅËÁÂÒÑ 2008</entry> <entry>15 ÄÅËÁÂÒÑ 2008</entry>
<entry>8.0-CURRENT ×ËÌÀÞÁÅÔ × ÓÅÂÑ ÎÏ×ÙÊ ÐÅÒÅÐÉÓÁÎÎÙÊ arp-v2. <entry>8.0-CURRENT ×ËÌÀÞÁÅÔ × ÓÅÂÑ ÎÏ×ÙÊ ÐÅÒÅÐÉÓÁÎÎÙÊ
</entry> arp-v2.</entry>
</row> </row>
<row> <row>
@ -3155,8 +3152,8 @@
<entry>800063</entry> <entry>800063</entry>
<entry>18 ÆÅ×ÒÁÌÑ 2009</entry> <entry>18 ÆÅ×ÒÁÌÑ 2009</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ËÏÎÆÉÇÁ GENERIC ÄÌÑ <entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ËÏÎÆÉÇÁ GENERIC ÄÌÑ
ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÓÔÅËÁ USB2, Á ÔÁËÖÅ ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ fdevname(3). ÉÓÐÏÌØÚÏ×ÁÎÉÑ ÓÔÅËÁ USB2, Á ÔÁËÖÅ ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ
</entry> fdevname(3).</entry>
</row> </row>
<row> <row>
@ -3169,8 +3166,8 @@
<row> <row>
<entry>800065</entry> <entry>800065</entry>
<entry>26 ÆÅ×ÒÁÌÑ 2009</entry> <entry>26 ÆÅ×ÒÁÌÑ 2009</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ ×ÓÅÈ ÆÕÎËÃÉÊ × libmp(3). <entry>8.0-CURRENT ÐÏÓÌÅ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ ×ÓÅÈ ÆÕÎËÃÉÊ ×
</entry> libmp(3).</entry>
</row> </row>
<row> <row>
@ -3184,15 +3181,15 @@
<entry>800067</entry> <entry>800067</entry>
<entry>28 ÆÅ×ÒÁÌÑ 2009</entry> <entry>28 ÆÅ×ÒÁÌÑ 2009</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ getdelim(), getline(), <entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ getdelim(), getline(),
stpncpy(), strnlen(), wcsnlen(), wcscasecmp() É wcsncasecmp(). stpncpy(), strnlen(), wcsnlen(), wcscasecmp() É
</entry> wcsncasecmp().</entry>
</row> </row>
<row> <row>
<entry>800068</entry> <entry>800068</entry>
<entry>2 ÍÁÒÔÁ 2009</entry> <entry>2 ÍÁÒÔÁ 2009</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ devclass ushub × uhub. <entry>8.0-CURRENT ÐÏÓÌÅ ÐÅÒÅÉÍÅÎÏ×ÁÎÉÑ devclass ushub ×
</entry> uhub.</entry>
</row> </row>
<row> <row>
@ -3233,8 +3230,8 @@
<row> <row>
<entry>800074</entry> <entry>800074</entry>
<entry>24 ÍÁÒÔÁ 2009</entry> <entry>24 ÍÁÒÔÁ 2009</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ tcpdump 4.0.0 É libpcap 1.0.0. <entry>8.0-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ tcpdump 4.0.0 É libpcap
</entry> 1.0.0.</entry>
</row> </row>
<row> <row>
@ -3247,8 +3244,8 @@
<row> <row>
<entry>800076</entry> <entry>800076</entry>
<entry>9 ÁÐÒÅÌÑ 2009</entry> <entry>9 ÁÐÒÅÌÑ 2009</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÐÒÏÆÉÌÅÊ ÚÁÄÅÒÖËÉ × dummynet. <entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÐÒÏÆÉÌÅÊ ÚÁÄÅÒÖËÉ ×
</entry> dummynet.</entry>
</row> </row>
<row> <row>
@ -3277,15 +3274,15 @@
<row> <row>
<entry>800080</entry> <entry>800080</entry>
<entry>15 ÁÐÒÅÌÑ 2009</entry> <entry>15 ÁÐÒÅÌÑ 2009</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÒÁÓËÌÁÄËÉ ÓÔÒÕËÔÕÒÙ inpcb. <entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÒÁÓËÌÁÄËÉ ÓÔÒÕËÔÕÒÙ
</entry> inpcb.</entry>
</row> </row>
<row> <row>
<entry>800081</entry> <entry>800081</entry>
<entry>19 ÁÐÒÅÌÑ 2009</entry> <entry>19 ÁÐÒÅÌÑ 2009</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÒÁÓËÌÁÄËÉ ÓÔÒÕËÔÕÒÙ malloc_type. <entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÒÁÓËÌÁÄËÉ ÓÔÒÕËÔÕÒÙ
</entry> malloc_type.</entry>
</row> </row>
<row> <row>
@ -3335,8 +3332,8 @@
<row> <row>
<entry>800088</entry> <entry>800088</entry>
<entry>20 ÍÁÑ 2009</entry> <entry>20 ÍÁÑ 2009</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÊ × ÒÅÖÉÍÅ net80211 monitor. <entry>8.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÊ × ÒÅÖÉÍÅ net80211
</entry> monitor.</entry>
</row> </row>
<row> <row>
@ -3349,8 +3346,8 @@
<row> <row>
<entry>800090</entry> <entry>800090</entry>
<entry>23 ÍÁÑ 2009</entry> <entry>23 ÍÁÑ 2009</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ËÌÏÎÉÒÏ×ÁÎÉÑ ×ÉÒÔÕÁÌÉÚÏ×ÁÎÎÙÈ ÉÎÔÅÒÆÅÊÓÏ×. <entry>8.0-CURRENT ÐÏÓÌÅ ËÌÏÎÉÒÏ×ÁÎÉÑ ×ÉÒÔÕÁÌÉÚÏ×ÁÎÎÙÈ
</entry> ÉÎÔÅÒÆÅÊÓÏ×.</entry>
</row> </row>
<row> <row>
@ -3372,8 +3369,8 @@
<row> <row>
<entry>800093</entry> <entry>800093</entry>
<entry>29 ÍÁÑ 2009</entry> <entry>29 ÍÁÑ 2009</entry>
<entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ mnt_xflag × ÓÔÒÕËÔÕÒÕ mount. <entry>8.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ mnt_xflag × ÓÔÒÕËÔÕÒÕ
</entry> mount.</entry>
</row> </row>
<row> <row>
@ -3485,8 +3482,8 @@
<row> <row>
<entry>800108</entry> <entry>800108</entry>
<entry>21 ÎÏÑÂÒÑ 2009</entry> <entry>21 ÎÏÑÂÒÑ 2009</entry>
<entry>8.0-STABLE ÐÏÓÌÅ ÒÅÁÌÉÚÁÃÉÉ kevent-ÆÉÌØÔÒÁ EVFILT_USER. <entry>8.0-STABLE ÐÏÓÌÅ ÒÅÁÌÉÚÁÃÉÉ kevent-ÆÉÌØÔÒÁ
</entry> EVFILT_USER.</entry>
</row> </row>
<row> <row>
@ -3570,15 +3567,15 @@
<entry>802501</entry> <entry>802501</entry>
<entry>28 ÆÅ×ÒÁÌÑ 2011</entry> <entry>28 ÆÅ×ÒÁÌÑ 2011</entry>
<entry>8.2-STABLE ÐÏÓÌÅ ÏÂÒÁÔÎÏÇÏ ÐÏÒÔÉÒÏ×ÁÎÉÑ ÉÚÍÅÎÅÎÉÊ DTrace, <entry>8.2-STABLE ÐÏÓÌÅ ÏÂÒÁÔÎÏÇÏ ÐÏÒÔÉÒÏ×ÁÎÉÑ ÉÚÍÅÎÅÎÉÊ DTrace,
×ËÌÀÞÁÀÝÉÈ ÐÏÄÄÅÒÖËÕ ÔÒÁÓÓÉÒÏ×ËÉ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ ÐÒÏÇÒÁÍÍ. ×ËÌÀÞÁÀÝÉÈ ÐÏÄÄÅÒÖËÕ ÔÒÁÓÓÉÒÏ×ËÉ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ
</entry> ÐÒÏÇÒÁÍÍ.</entry>
</row> </row>
<row> <row>
<entry>802502</entry> <entry>802502</entry>
<entry>6 ÍÁÒÔÁ 2011</entry> <entry>6 ÍÁÒÔÁ 2011</entry>
<entry>8.2-STABLE ÐÏÓÌÅ ÏÂÒÁÔÎÏÇÏ ÐÏÒÔÉÒÏ×ÁÎÉÑ log2 É log2f × libm. <entry>8.2-STABLE ÐÏÓÌÅ ÏÂÒÁÔÎÏÇÏ ÐÏÒÔÉÒÏ×ÁÎÉÑ log2 É log2f ×
</entry> libm.</entry>
</row> </row>
<row> <row>
@ -3693,8 +3690,8 @@
<row> <row>
<entry>803500</entry> <entry>803500</entry>
<entry>3 ÍÁÒÔÁ 2012</entry> <entry>3 ÍÁÒÔÁ 2012</entry>
<entry>8.3-STABLE ÐÏÓÌÅ ÏÔÄÅÌÅÎÉÑ ×ÅÔËÉ releng/8.3 (RELENG_8_3). <entry>8.3-STABLE ÐÏÓÌÅ ÏÔÄÅÌÅÎÉÑ ×ÅÔËÉ releng/8.3
</entry> (RELENG_8_3).</entry>
</row> </row>
<row> <row>
@ -3765,8 +3762,8 @@
<entry>13 ÑÎ×ÁÒÑ 2010</entry> <entry>13 ÑÎ×ÁÒÑ 2010</entry>
<entry>9.0-CURRENT ÐÏÓÌÅ ÕÄÁÌÅÎÉÑ utmp(5) É ÄÏÂÁ×ÌÅÎÉÑ utmpx <entry>9.0-CURRENT ÐÏÓÌÅ ÕÄÁÌÅÎÉÑ utmp(5) É ÄÏÂÁ×ÌÅÎÉÑ utmpx
(ÓÍÏÔÒÉÔÅ <function>getutxent(3)</function>) ÄÌÑ ÕÌÕÞÛÅÎÎÏÇÏ (ÓÍÏÔÒÉÔÅ <function>getutxent(3)</function>) ÄÌÑ ÕÌÕÞÛÅÎÎÏÇÏ
ÐÒÏÔÏËÏÌÉÒÏ×ÁÎÉÑ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ ×ÈÏÄÏ× É ÓÉÓÔÅÍÎÙÈ ÓÏÂÙÔÉÊ. ÐÒÏÔÏËÏÌÉÒÏ×ÁÎÉÑ ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÈ ×ÈÏÄÏ× É ÓÉÓÔÅÍÎÙÈ
</entry> ÓÏÂÙÔÉÊ.</entry>
</row> </row>
<row> <row>
@ -3800,15 +3797,15 @@
<row> <row>
<entry>900012</entry> <entry>900012</entry>
<entry>10 ÍÁÑ 2010</entry> <entry>10 ÍÁÑ 2010</entry>
<entry>9.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ liblzma, xz, xzdec É lzmainfo. <entry>9.0-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ liblzma, xz, xzdec É
</entry> lzmainfo.</entry>
</row> </row>
<row> <row>
<entry>900013</entry> <entry>900013</entry>
<entry>14 ÍÁÑ 2010</entry> <entry>14 ÍÁÑ 2010</entry>
<entry>9.0-CURRENT ÐÏÓÌÅ ÐÒÉ×ÌÅÞÅÎÉÑ ÉÓÐÒÁ×ÌÅÎÉÊ USB × linux(4). <entry>9.0-CURRENT ÐÏÓÌÅ ÐÒÉ×ÌÅÞÅÎÉÑ ÉÓÐÒÁ×ÌÅÎÉÊ USB ×
</entry> linux(4).</entry>
</row> </row>
<row> <row>
@ -3876,22 +3873,22 @@
<row> <row>
<entry>900023</entry> <entry>900023</entry>
<entry>11 ÏËÔÑÂÒÑ 2010</entry> <entry>11 ÏËÔÑÂÒÑ 2010</entry>
<entry>9.0-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ xz ÄÏ ÓÎÁÐÛÏÔÁ git 20101010. <entry>9.0-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ xz ÄÏ ÓÎÁÐÛÏÔÁ git
</entry> 20101010.</entry>
</row> </row>
<row> <row>
<entry>900024</entry> <entry>900024</entry>
<entry>11 ÎÏÑÂÒÑ 2010</entry> <entry>11 ÎÏÑÂÒÑ 2010</entry>
<entry>9.0-CURRENT ÐÏÓÌÅ ÚÁÍÅÎÙ libgcc.a ÎÁ libcompiler_rt.a. <entry>9.0-CURRENT ÐÏÓÌÅ ÚÁÍÅÎÙ libgcc.a ÎÁ
</entry> libcompiler_rt.a.</entry>
</row> </row>
<row> <row>
<entry>900025</entry> <entry>900025</entry>
<entry>12 ÎÏÑÂÒÑ 2010</entry> <entry>12 ÎÏÑÂÒÑ 2010</entry>
<entry>9.0-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÍÏÄÕÌØÎÏÇÏ ËÏÎÔÒÏÌÑ ÐÅÒÅÇÒÕÚËÉ. <entry>9.0-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÍÏÄÕÌØÎÏÇÏ ËÏÎÔÒÏÌÑ
</entry> ÐÅÒÅÇÒÕÚËÉ.</entry>
</row> </row>
<row> <row>
@ -3920,15 +3917,14 @@
<entry>28 ÄÅËÁÂÒÑ 2010</entry> <entry>28 ÄÅËÁÂÒÑ 2010</entry>
<entry>9.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÓÔÅËÁ TCP ÄÌÑ ×ÚÁÉÍÏÄÅÊÓÔ×ÉÑ Ó <entry>9.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÓÔÅËÁ TCP ÄÌÑ ×ÚÁÉÍÏÄÅÊÓÔ×ÉÑ Ó
ÍÏÄÕÌÑÍÉ Khelp ÞÅÒÅÚ ×ÓÐÏÍÏÇÁÔÅÌØÎÙÅ ÔÏÞËÉ Ó×ÑÚÉ É ÈÒÁÎÅÎÉÑ ÍÏÄÕÌÑÍÉ Khelp ÞÅÒÅÚ ×ÓÐÏÍÏÇÁÔÅÌØÎÙÅ ÔÏÞËÉ Ó×ÑÚÉ É ÈÒÁÎÅÎÉÑ
ÄÁÎÎÙÈ ÕÒÏ×ÎÑ ÓÅÔÅ×ÏÇÏ ÓÏÅÄÉÎÅÎÉÑ × ÕÐÒÁ×ÌÑÀÝÅÍ ÂÌÏËÅ TCP. ÄÁÎÎÙÈ ÕÒÏ×ÎÑ ÓÅÔÅ×ÏÇÏ ÓÏÅÄÉÎÅÎÉÑ × ÕÐÒÁ×ÌÑÀÝÅÍ ÂÌÏËÅ TCP.</entry>
</entry>
</row> </row>
<row> <row>
<entry>900030</entry> <entry>900030</entry>
<entry>12 ÑÎ×ÁÒÑ 2011</entry> <entry>12 ÑÎ×ÁÒÑ 2011</entry>
<entry>9.0-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ libdialog ÄÏ ×ÅÒÓÉÉ 20100428. <entry>9.0-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ libdialog ÄÏ ×ÅÒÓÉÉ
</entry> 20100428.</entry>
</row> </row>
<row> <row>
@ -3941,22 +3937,22 @@
<row> <row>
<entry>900032</entry> <entry>900032</entry>
<entry>8 ÆÅ×ÒÁÌÑ 2011</entry> <entry>8 ÆÅ×ÒÁÌÑ 2011</entry>
<entry>9.0-CURRENT ÐÏÓÌÅ ÕÄÁÌÅÎÉÑ ÓÉÍ×ÏÌÁ É ÐÒÏÔÏÔÉÐÁ uio_yield. <entry>9.0-CURRENT ÐÏÓÌÅ ÕÄÁÌÅÎÉÑ ÓÉÍ×ÏÌÁ É ÐÒÏÔÏÔÉÐÁ
</entry> uio_yield.</entry>
</row> </row>
<row> <row>
<entry>900033</entry> <entry>900033</entry>
<entry>18 ÆÅ×ÒÁÌÑ 2011</entry> <entry>18 ÆÅ×ÒÁÌÑ 2011</entry>
<entry>9.0-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ binutils ÄÏ ×ÅÒÓÉÉ 2.17.50. <entry>9.0-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ binutils ÄÏ ×ÅÒÓÉÉ
</entry> 2.17.50.</entry>
</row> </row>
<row> <row>
<entry>900034</entry> <entry>900034</entry>
<entry>8 ÍÁÒÔÁ 2011</entry> <entry>8 ÍÁÒÔÁ 2011</entry>
<entry>9.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÊ × struct sysvec (sv_schedtail). <entry>9.0-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÊ × struct sysvec
</entry> (sv_schedtail).</entry>
</row> </row>
<row> <row>
@ -4041,8 +4037,8 @@
<row> <row>
<entry>900045</entry> <entry>900045</entry>
<entry>2 ÑÎ×ÁÒÑ 2012</entry> <entry>2 ÑÎ×ÁÒÑ 2012</entry>
<entry>9.0-CURRENT ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC true/false ÉÚ 1000002. <entry>9.0-CURRENT ÐÏÓÌÅ ×ÙÐÏÌÎÅÎÉÑ MFC true/false ÉÚ
</entry> 1000002.</entry>
</row> </row>
<row> <row>
@ -4104,8 +4100,8 @@
<row> <row>
<entry>901500</entry> <entry>901500</entry>
<entry>6 Á×ÇÕÓÔÁ 2012</entry> <entry>6 Á×ÇÕÓÔÁ 2012</entry>
<entry>9.1-STABLE ÐÏÓÌÅ ÏÔÄÅÌÅÎÉÑ ×ÅÔËÉ releng/9.1 (RELENG_9_1). <entry>9.1-STABLE ÐÏÓÌÅ ÏÔÄÅÌÅÎÉÑ ×ÅÔËÉ releng/9.1
</entry> (RELENG_9_1).</entry>
</row> </row>
<row> <row>
@ -4150,16 +4146,16 @@
<entry>902001</entry> <entry>902001</entry>
<entry>3 Á×ÇÕÓÔÁ 2013</entry> <entry>3 Á×ÇÕÓÔÁ 2013</entry>
<entry>ïÔÄÅÌÅÎÉÅ ×ÅÔËÉ <literal>releng/9.2</literal> ÏÔ <entry>ïÔÄÅÌÅÎÉÅ ×ÅÔËÉ <literal>releng/9.2</literal> ÏÔ
<literal>stable/9</literal> (ÒÅ×. <revnumber>253912</revnumber>). <literal>stable/9</literal> (ÒÅ×.
</entry> <revnumber>253912</revnumber>).</entry>
</row> </row>
<row> <row>
<entry>902501</entry> <entry>902501</entry>
<entry>August 2, 2013</entry> <entry>August 2, 2013</entry>
<entry>9.2-STABLE ÐÏÓÌÅ ÓÏÚÄÁÎÉÑ ×ÅÔËÉ <entry>9.2-STABLE ÐÏÓÌÅ ÓÏÚÄÁÎÉÑ ×ÅÔËÉ
<literal>releng/9.2</literal> (ÒÅ×. <revnumber>253913</revnumber>). <literal>releng/9.2</literal> (ÒÅ×.
</entry> <revnumber>253913</revnumber>).</entry>
</row> </row>
<row> <row>
@ -4250,8 +4246,8 @@
<entry>1000006</entry> <entry>1000006</entry>
<entry>26 ÑÎ×ÁÒÑ 2012</entry> <entry>26 ÑÎ×ÁÒÑ 2012</entry>
<entry>10-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÁÓÉÎÈÒÏÎÎÙÈ Õ×ÅÄÏÍÌÅÎÉÊ Ï ÎÁÌÉÞÉÉ <entry>10-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÁÓÉÎÈÒÏÎÎÙÈ Õ×ÅÄÏÍÌÅÎÉÊ Ï ÎÁÌÉÞÉÉ
×ÈÏÄÎÙÈ ÄÁÎÎÙÈ × ÕÒÏ×ÎÅ cam(4) (ÒÅ×. <revnumber>230590</revnumber>). ×ÈÏÄÎÙÈ ÄÁÎÎÙÈ × ÕÒÏ×ÎÅ cam(4) (ÒÅ×.
</entry> <revnumber>230590</revnumber>).</entry>
</row> </row>
<row> <row>
@ -4368,8 +4364,8 @@
<entry>22 ÏËÔÑÂÒÑ 2012</entry> <entry>22 ÏËÔÑÂÒÑ 2012</entry>
<entry>10-CURRENT ÐÏÓÌÅ ÕÄÁÌÅÎÉÑ ÐÏÄÄÅÒÖËÉ ÆÁÊÌÏ×ÙÈ ÓÉÓÔÅÍ, ÎÅ <entry>10-CURRENT ÐÏÓÌÅ ÕÄÁÌÅÎÉÑ ÐÏÄÄÅÒÖËÉ ÆÁÊÌÏ×ÙÈ ÓÉÓÔÅÍ, ÎÅ
Ñ×ÌÑÀÝÉÈÓÑ MPSAFE, É ÄÏÂÁ×ÌÅÎÉÑ ÐÏÄÄÅÒÖËÉ FUSEFS (ÒÅ×. Ñ×ÌÑÀÝÉÈÓÑ MPSAFE, É ÄÏÂÁ×ÌÅÎÉÑ ÐÏÄÄÅÒÖËÉ FUSEFS (ÒÅ×.
<revnumber>241519</revnumber>, <revnumber>241897</revnumber>). <revnumber>241519</revnumber>,
</entry> <revnumber>241897</revnumber>).</entry>
</row> </row>
<row> <row>
@ -4395,8 +4391,7 @@
<entry>5 ÎÏÑÂÒÑ 2012</entry> <entry>5 ÎÏÑÂÒÑ 2012</entry>
<entry>10-CURRENT ÐÏÓÌÅ ÐÅÒÅËÌÀÞÅÎÉÑ ËÏÍÐÉÌÑÔÏÒÁ ÐÏ ÕÍÏÌÞÁÎÉÀ ÎÁ <entry>10-CURRENT ÐÏÓÌÅ ÐÅÒÅËÌÀÞÅÎÉÑ ËÏÍÐÉÌÑÔÏÒÁ ÐÏ ÕÍÏÌÞÁÎÉÀ ÎÁ
clang ÎÁ ÐÌÁÔÆÏÒÍÁÈ i386 É amd64 (ÒÅ×. clang ÎÁ ÐÌÁÔÆÏÒÍÁÈ i386 É amd64 (ÒÅ×.
<revnumber>242624</revnumber>). <revnumber>242624</revnumber>).</entry>
</entry>
</row> </row>
<row> <row>
@ -4407,8 +4402,8 @@
ÏÔÐÒÁ×ËÏÊ ÓÔÒÕËÔÕÒÙ × ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÊ ÒÅÖÉÍ ÐÏÓÒÅÄÓÔ×ÏÍ sysctl ÏÔÐÒÁ×ËÏÊ ÓÔÒÕËÔÕÒÙ × ÐÏÌØÚÏ×ÁÔÅÌØÓËÉÊ ÒÅÖÉÍ ÐÏÓÒÅÄÓÔ×ÏÍ sysctl
ÉÌÉ ÓÏËÅÔÁ ÍÁÒÛÒÕÔÉÚÁÃÉÉ. üÔÏ ÏÚÎÁÞÁÅÔ, ÞÔÏ ÓÐÅÃÉÆÉÞÎÙÊ ÄÌÑ KAME ÉÌÉ ÓÏËÅÔÁ ÍÁÒÛÒÕÔÉÚÁÃÉÉ. üÔÏ ÏÚÎÁÞÁÅÔ, ÞÔÏ ÓÐÅÃÉÆÉÞÎÙÊ ÄÌÑ KAME
embedded scope id × sin6_addr.s6_addr[2] × ÐÏÌØÚÏ×ÁÔÅÌØÓËÏÍ embedded scope id × sin6_addr.s6_addr[2] × ÐÏÌØÚÏ×ÁÔÅÌØÓËÏÍ
ÐÒÉÌÏÖÅÎÉÉ ×ÓÅÇÄÁ ÏÞÉÝÁÅÔÓÑ (ÒÅ×. <revnumber>243443</revnumber>). ÐÒÉÌÏÖÅÎÉÉ ×ÓÅÇÄÁ ÏÞÉÝÁÅÔÓÑ (ÒÅ×.
</entry> <revnumber>243443</revnumber>).</entry>
</row> </row>
<row> <row>
@ -4462,9 +4457,9 @@
<entry>1000032</entry> <entry>1000032</entry>
<entry>1 ÍÁÑ 2013</entry> <entry>1 ÍÁÑ 2013</entry>
<entry>10-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÓÉÓÔÅÍÎÙÈ ×ÙÚÏ×Ï× <entry>10-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÓÉÓÔÅÍÎÙÈ ×ÙÚÏ×Ï×
<function>accept4</function> (ÒÅ×. <revnumber>250154</revnumber>) É <function>accept4</function> (ÒÅ×. <revnumber>250154</revnumber>)
<function>pipe2</function> (ÒÅ×. <revnumber>250159</revnumber>). É <function>pipe2</function> (ÒÅ×.
</entry> <revnumber>250159</revnumber>).</entry>
</row> </row>
<row> <row>
@ -4486,24 +4481,24 @@
<function>catanh</function>, <function>catanhf</function>, <function>catanh</function>, <function>catanhf</function>,
<function>logl</function>, <function>log2l</function>, <function>logl</function>, <function>log2l</function>,
<function>log10l</function>, <function>log1pl</function>, <function>log10l</function>, <function>log1pl</function>,
<function>expm1l</function> (ÒÅ×. <revnumber>251294</revnumber>). <function>expm1l</function> (ÒÅ×.
</entry> <revnumber>251294</revnumber>).</entry>
</row> </row>
<row> <row>
<entry>1000035</entry> <entry>1000035</entry>
<entry>8 ÉÀÎÑ 2013</entry> <entry>8 ÉÀÎÑ 2013</entry>
<entry>10-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÓÉÓÔÅÍÎÏÇÏ ×ÙÚÏ×Á <entry>10-CURRENT ÐÏÓÌÅ ÐÏÑ×ÌÅÎÉÑ ÓÉÓÔÅÍÎÏÇÏ ×ÙÚÏ×Á
<function>aio_mlock</function> (ÒÅ×. <revnumber>251526</revnumber>). <function>aio_mlock</function> (ÒÅ×.
</entry> <revnumber>251526</revnumber>).</entry>
</row> </row>
<row> <row>
<entry>1000036</entry> <entry>1000036</entry>
<entry>9 ÉÀÌÑ 2013</entry> <entry>9 ÉÀÌÑ 2013</entry>
<entry>10-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÎÏ×ÏÊ ÆÕÎËÃÉÉ × ÐÒÏÇÒÁÍÍÎÙÊ <entry>10-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÎÏ×ÏÊ ÆÕÎËÃÉÉ × ÐÒÏÇÒÁÍÍÎÙÊ
ÉÎÔÅÒÆÅÊÓ ÍÏÄÕÌÑ ÑÄÒÁ GSSAPI (ÒÅ×. <revnumber>253049</revnumber>). ÉÎÔÅÒÆÅÊÓ ÍÏÄÕÌÑ ÑÄÒÁ GSSAPI (ÒÅ×.
</entry> <revnumber>253049</revnumber>).</entry>
</row> </row>
<row> <row>
@ -4519,8 +4514,8 @@
<literal>mrt6stat</literal>, <literal>mrtstat</literal>, <literal>mrt6stat</literal>, <literal>mrtstat</literal>,
<literal>pfkeystat</literal>, <literal>pim6stat</literal>, <literal>pfkeystat</literal>, <literal>pim6stat</literal>,
<literal>pimstat</literal>, <literal>rip6stat</literal>, <literal>pimstat</literal>, <literal>rip6stat</literal>,
<literal>udpstat</literal> (ÒÅ×. <revnumber>253081</revnumber>). <literal>udpstat</literal> (ÒÅ×.
</entry> <revnumber>253081</revnumber>).</entry>
</row> </row>
<row> <row>
@ -4528,8 +4523,8 @@
<entry>16 ÉÀÌÑ 2013</entry> <entry>16 ÉÀÌÑ 2013</entry>
<entry>10-CURRENT ÐÏÓÌÅ ÐÅÒÅËÌÀÞÅÎÉÑ ABI, ÉÓÐÏÌØÚÕÅÍÏÇÏ ÐÏ <entry>10-CURRENT ÐÏÓÌÅ ÐÅÒÅËÌÀÞÅÎÉÑ ABI, ÉÓÐÏÌØÚÕÅÍÏÇÏ ÐÏ
ÕÍÏÌÞÁÎÉÀ, ÎÁ <literal>ARM EABI</literal> ÄÌÑ ÁÒÈÉÔÅËÔÕÒ arm, ÕÍÏÌÞÁÎÉÀ, ÎÁ <literal>ARM EABI</literal> ÄÌÑ ÁÒÈÉÔÅËÔÕÒ arm,
armeb, armv6, and armv6eb (ÒÅ×. <revnumber>253396</revnumber>). armeb, armv6, and armv6eb (ÒÅ×.
</entry> <revnumber>253396</revnumber>).</entry>
</row> </row>
<row> <row>
@ -4579,8 +4574,8 @@
<entry>15 Á×ÇÕÓÔÁ 2013</entry> <entry>15 Á×ÇÕÓÔÁ 2013</entry>
<entry>10-CURRENT ÐÏÓÌÅ ÐÅÒÅ×ÏÄÁ <literal>libc.so</literal> ÎÁ <entry>10-CURRENT ÐÏÓÌÅ ÐÅÒÅ×ÏÄÁ <literal>libc.so</literal> ÎÁ
ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÓÃÅÎÁÒÉÑ &man.ld.1; (ÒÅ×. ÉÓÐÏÌØÚÏ×ÁÎÉÅ ÓÃÅÎÁÒÉÑ &man.ld.1; (ÒÅ×.
<revnumber>251668</revnumber>, <revnumber>254358</revnumber>). <revnumber>251668</revnumber>,
</entry> <revnumber>254358</revnumber>).</entry>
</row> </row>
<row> <row>
@ -4598,8 +4593,8 @@
<entry>10-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÆÌÁÇÏ× mbuf <entry>10-CURRENT ÐÏÓÌÅ ÄÏÂÁ×ÌÅÎÉÑ ÆÌÁÇÏ× mbuf
<literal>M_PROTO[9-12]</literal> É ÕÄÁÌÅÎÉÑ ÆÌÁÇÏ× <literal>M_PROTO[9-12]</literal> É ÕÄÁÌÅÎÉÑ ÆÌÁÇÏ×
<literal>M_FRAG|M_FIRSTFRAG|M_LASTFRAG</literal> (ÒÅ×. <literal>M_FRAG|M_FIRSTFRAG|M_LASTFRAG</literal> (ÒÅ×.
<revnumber>254524</revnumber>, <revnumber>254526</revnumber>). <revnumber>254524</revnumber>,
</entry> <revnumber>254526</revnumber>).</entry>
</row> </row>
<row> <row>
@ -4607,16 +4602,16 @@
<entry>21 Á×ÇÕÓÔÁ 2013</entry> <entry>21 Á×ÇÕÓÔÁ 2013</entry>
<entry>10-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ &man.stat.2;, ÐÏÚ×ÏÌÑÀÛÅÇÏ <entry>10-CURRENT ÐÏÓÌÅ ÏÂÎÏ×ÌÅÎÉÑ &man.stat.2;, ÐÏÚ×ÏÌÑÀÛÅÇÏ
ÓÏÈÒÁÎÑÔØ ÎÅËÏÔÏÒÙÅ ÆÁÊÌÏ×ÙÅ ÁÔÒÉÂÕÔÙ Windows/DOS É CIFS × ÓÏÈÒÁÎÑÔØ ÎÅËÏÔÏÒÙÅ ÆÁÊÌÏ×ÙÅ ÁÔÒÉÂÕÔÙ Windows/DOS É CIFS ×
ËÁÞÅÓÔ×Å ÆÌÁÇÏ× &man.stat.2; (ÒÅ×. <revnumber>254627</revnumber>). ËÁÞÅÓÔ×Å ÆÌÁÇÏ× &man.stat.2; (ÒÅ×.
</entry> <revnumber>254627</revnumber>).</entry>
</row> </row>
<row> <row>
<entry>1000048</entry> <entry>1000048</entry>
<entry>22 Á×ÇÕÓÔÁ 2013</entry> <entry>22 Á×ÇÕÓÔÁ 2013</entry>
<entry>10-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÓÔÒÕËÔÕÒÙ <entry>10-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÓÔÒÕËÔÕÒÙ
<literal>xsctp_inpcb</literal> (ÒÅ×. <revnumber>254672</revnumber>). <literal>xsctp_inpcb</literal> (ÒÅ×.
</entry> <revnumber>254672</revnumber>).</entry>
</row> </row>
<row> <row>
@ -4632,8 +4627,9 @@
<entry>1000050</entry> <entry>1000050</entry>
<entry>24 Á×ÇÕÓÔÁ 2013</entry> <entry>24 Á×ÇÕÓÔÁ 2013</entry>
<entry>10-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÓÔÒÕËÔÕÒÙ <literal>mbuf</literal> <entry>10-CURRENT ÐÏÓÌÅ ÉÚÍÅÎÅÎÉÑ ÓÔÒÕËÔÕÒÙ <literal>mbuf</literal>
(ÒÅ×. <revnumber>254780</revnumber>, <revnumber>254799</revnumber>, (ÒÅ×. <revnumber>254780</revnumber>,
<revnumber>254804</revnumber>, <revnumber>254807</revnumber> <revnumber>254799</revnumber>, <revnumber>254804</revnumber>,
<revnumber>254807</revnumber>,
<revnumber>254842</revnumber>).</entry> <revnumber>254842</revnumber>).</entry>
</row> </row>
@ -4641,8 +4637,8 @@
<entry>1000051</entry> <entry>1000051</entry>
<entry>25 Á×ÇÕÓÔÁ 2013</entry> <entry>25 Á×ÇÕÓÔÁ 2013</entry>
<entry>10-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ ÄÒÁÊ×ÅÒÁ Radeon KMS (ÒÅ×. <entry>10-CURRENT ÐÏÓÌÅ ÉÍÐÏÒÔÁ ÄÒÁÊ×ÅÒÁ Radeon KMS (ÒÅ×.
<revnumber>254885</revnumber>, <revnumber>254887</revnumber>). <revnumber>254885</revnumber>,
</entry> <revnumber>254887</revnumber>).</entry>
</row> </row>
<row> <row>
@ -4717,8 +4713,9 @@
<row> <row>
<entry>1000700</entry> <entry>1000700</entry>
<entry>7 ÄÅËÁÂÒÑ 2013</entry> <entry>7 ÄÅËÁÂÒÑ 2013</entry>
<entry>10-STABLE ÐÏÓÌÅ ÏÔÄÅÌÅÎÉÑ ×ÅÔËÉ <literal>releng/10.0</literal> <entry>10-STABLE ÐÏÓÌÅ ÏÔÄÅÌÅÎÉÑ ×ÅÔËÉ
(ÒÅ×. <revnumber>259069</revnumber>).</entry> <literal>releng/10.0</literal> (ÒÅ×.
<revnumber>259069</revnumber>).</entry>
</row> </row>
<row> <row>