doc/ru_RU.KOI8-R/books/porters-handbook/testing/chapter.xml
2014-07-12 14:08:49 +00:00

214 lines
9.1 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?xml version="1.0" encoding="koi8-r"?>
<!--
The FreeBSD Russian Documentation Project
$FreeBSD$
Original revision: r43840
-->
<chapter xmlns="http://docbook.org/ns/docbook"
xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0"
xml:id="testing">
<title>Тестирование вашего порта</title>
<sect1 xml:id="make-describe">
<title>Запуск <command>make describe</command></title>
<para>Некоторые утилиты &os; для сопровождения портов, например,
&man.portupgrade.1;, опираются на базу данных с именем
<filename>/usr/ports/INDEX</filename>, в которой отслеживаются
такие характеристики портов, как их зависимости. Файл
<filename>INDEX</filename> создаётся при помощи
<filename>ports/Makefile</filename> верхнего уровня по команде
<command>make index</command>, спускающейся в подкаталог
каждого порта и выполняющей в нём <command>make
describe</command>. Таким образом, если выполнение
<command>make describe</command> с каким-либо портом завершится
неудачно, то никому не удастся создать
<filename>INDEX</filename>, при этом много людей вскоре станут
несчастны.</para>
<note>
<para>Возможность генерировать этот файл очень важна вне
зависимости от того, какие параметры присутствуют в
<filename>make.conf</filename>, поэтому, пожалуйста,
избегайте, таких вещей, как использование декларации
<literal>.error</literal>, когда (к примеру) требования к
зависимости не было удовлетворено. (Смотрите
<xref linkend="dads-dot-error"/>.)</para>
</note>
<para>Если <command>make describe</command> выдаёт строчку, а не
ошибку, то для вас это пройдёт безболезненно. Обратитесь к
файлу <filename>bsd.port.mk</filename>, чтобы выяснить значение
выдаваемых строк.</para>
<para>Заметьте также, что запуск последней версии
<command>portlint</command> (как указано в следующем разделе)
приведёт к автоматическому запуску команды
<command>make describe</command>.</para>
</sect1>
<sect1 xml:id="testing-portlint">
<title>Portlint</title>
<para>Проверьте свою работу командой <link
linkend="porting-portlint"><command>portlint</command></link>
перед тем, как её отослать или перенести в дерево портов.
<command>portlint</command> предупреждает вас о многих
распространённых ошибках, как функциональных, так и
стилистических. Для нового (или скопированного внутри
хранилища) порта самым подходящим является запуск
<command>portlint -A</command>; для уже существующего порта
достаточно будет запустить
<command>portlint -C</command>.</para>
<para>Так как для обнаружения ошибок <command>portlint</command>
использует эвристические методы, то им могут выдаваться и
ошибочные предупреждения. Кроме того, время от времени нечто,
отмечаемое как некорректность, из-за ограничений механизма
создания портов не может быть сделано никак иначе. Если вы
сомневаетесь, то лучше всего спросить в &a.ports;.</para>
</sect1>
<sect1 xml:id="testing-porttools">
<title>Port Tools</title>
<para>Программа <package
role="port">ports-mgmt/porttools</package> входит в состав
Коллекции Портов.</para>
<para><command>port</command> является сценарием переднего плана,
который может упростить вам задачу тестирования. Если вы
хотите проверить новый порт или обновить существующий, то вы
можете использовать <command>port test</command> для проверки
вашего порта, включая проверку <link
linkend="testing-portlint"><command>portlint</command></link>.
Эта команда также находит и отображает любые файлы, которые
невключенные в <filename>pkg-plist</filename>. Смотрите
следующий пример:</para>
<screen>&prompt.root; <userinput>port test /usr/ports/net/csup</userinput></screen>
</sect1>
<sect1 xml:id="porting-prefix">
<title><varname>PREFIX</varname> и
<varname>DESTDIR</varname></title>
<para>Переменная <varname>PREFIX</varname> определяет, куда будет
установлен порт. По умолчанию это
<filename>/usr/local</filename>, но может меняться
пользователем на собственный путь, такой как
<filename>/opt</filename>. В вашем порту значение этой
переменной должно учитываться.</para>
<para>Если пользователь установил переменную
<varname>DESTDIR</varname>, то она определяет полное
альтернативное окружение, обычно, это jail или установленная
система, смонтированная в месте, отличном от
<filename>/</filename>. На самом деле порт устанавливается в
<filename>DESTDIR/PREFIX</filename> и регистрируется в базе
данных пакетов в <filename>DESTDIR/var/db/pkg</filename>.
Поскольку управление <varname>DESTDIR</varname> производится
автоматически инфраструктурой портов с помощью &man.chroot.8;,
вам не нужны никакие изменения или проявление особой
осторожности при написании портов, совместымых с
<varname>DESTDIR</varname>.</para>
<para>Значение переменной <varname>PREFIX</varname> будет
установлено в <varname>LOCALBASE</varname> (по умолчанию
<filename>/usr/local</filename>). Если задана переменная
<varname>USE_LINUX_PREFIX</varname>, то
<varname>PREFIX</varname> примет значение
<varname>LINUXBASE</varname> (по умолчанию
<filename>/compat/linux</filename>).</para>
<para>Избегание явно прописываемых путей
<filename>/usr/local</filename> в исходном коде сделает порт
гораздо более гибким и способным удовлетворить потребности
других серверов. Часто этого можно добиться простой заменой
строк <filename>/usr/local</filename> в различных файлах
<filename>Makefile</filename> внутри порта на
<literal>&dollar;{PREFIX}</literal>. Эта переменная
автоматически передаётся далее на каждом этапе построения и
установки.</para>
<para>Проверьте, что ваше приложение не устанавливает чего-либо в
каталог <filename>/usr/local</filename> вместо
<varname>PREFIX</varname>. Наличие явно указанных путей можно
быстро проверить следующим образом:</para>
<screen>&prompt.root; <userinput>make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`</userinput></screen>
<para>Если что-то было установлено за пределами
<varname>PREFIX</varname>, то процесс создания пакета сообщит
об отсутствии файлов.</para>
<para>Это также стоит проверить с использованием поддержки
каталога сборки (смотрите <xref linkend="staging"/>):</para>
<screen>&prompt.root; <userinput>make stage &amp;&amp; make check-orphans &amp;&amp; make package</userinput></screen>
<para>Эти проверки не найдут явно указанных путей внутри файлов
порта и не проверят корректность использования
<varname>LOCALBASE</varname> в качестве ссылки на файлы из
других портов. Порт, временно установленный в
<filename>/var/tmp/`make -V PORTNAME`</filename>, следует
проверять на работоспособность, чтобы убедиться в отсутствии
проблем с путями.</para>
<para>Переменная <varname>PREFIX</varname> не должна задаваться
явно в файле <filename>Makefile</filename> порта. Пользователи
при установке порта могут задать в <varname>PREFIX</varname>
свое собственное место, и порт должен учитывать это
значение.</para>
<para>Обратитесь к программам/файлам из других портов с
переменными, перечисленными выше, без указания явных маршрутов.
Например, если ваш порт требует, чтобы макрос
<literal>PAGER</literal> являлся полным путем утилиты
<command>less</command>, не используйте строковый путь
<filename>/usr/local/bin/less</filename>. Вместо этого
используйте <literal>&dollar;{LOCALBASE}</literal>:</para>
<programlisting>-DPAGER=\"&dollar;{LOCALBASE}/bin/less\"</programlisting>
<para>Путь с использованием <varname>LOCALBASE</varname> имеет
больше шансов оставаться работоспособным, если системный
администратор переместил всё дерево
<filename>/usr/local</filename> куда-то в другое место.</para>
</sect1>
<sect1 xml:id="testing-tinderbox">
<title>Tinderbox</title>
<para>Если вы алчный контрибутор портов, то вы можете захотеть
взглянуть на <application>Tinderbox</application>. Это мощная
система построения и тестирования портов.
<application>Tinderbox</application> можно установить,
используя порт <package
role="port">ports-mgmt/tinderbox</package>. Обязательно
прочитайте поставляемую документацию, поскольку конфигурация не
является тривиальной.</para>
<para>Для получения подробностей посетите <link
xlink:href="http://tinderbox.marcuscom.com/">вебсайт
Tinderbox</link>.</para>
</sect1>
<sect1 xml:id="testing-poudriere">
<title>Poudriere</title>
<para>Если вы контрибутор портов, подумайте об установке
<application>poudriere</application>. Это мощная система для
построения и тестирования портов.
<application>Poudriere</application> можно установить из
<package role="port">ports-mgmt/poudriere</package>.</para>
<para>Для получения подробной информации посетите <link
xlink:href="http://fossil.etoilebsd.net/poudriere">вебсайт
Poudriere</link>.</para>
</sect1>
</chapter>