214 lines
9.1 KiB
XML
214 lines
9.1 KiB
XML
<?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>${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 && make check-orphans && 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>${LOCALBASE}</literal>:</para>
|
||
|
||
<programlisting>-DPAGER=\"${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>
|