# port test /usr/ports/net/csup
Глава 9. Тестирование вашего порта
Этот перевод может быть устаревшим. Для того, чтобы помочь с переводом, пожалуйста, обратитесь к Сервер переводов FreeBSD.
Содержание
9.1. Запуск make describe
Некоторые утилиты FreeBSD для сопровождения портов, например, portupgrade(1), опираются на базу данных с именем /usr/ports/INDEX, в которой отслеживаются такие характеристики портов, как их зависимости. Файл INDEX создаётся при помощи ports/Makefile верхнего уровня по команде make index
, спускающейся в подкаталог каждого порта и выполняющей в нём make describe
. Таким образом, если выполнение make describe
с каким-либо портом завершится неудачно, то никому не удастся создать INDEX, при этом много людей вскоре станут несчастны.
Возможность генерировать этот файл очень важна вне зависимости от того, какие параметры присутствуют в make.conf, поэтому, пожалуйста, избегайте, таких вещей, как использование декларации |
Если make describe
выдаёт строчку, а не ошибку, то для вас это пройдёт безболезненно. Обратитесь к файлу bsd.port.mk, чтобы выяснить значение выдаваемых строк.
Заметьте также, что запуск последней версии portlint
(как указано в следующем разделе) приведёт к автоматическому запуску команды make describe
.
9.2. Portlint
Проверьте свою работу командой portlint
перед тем, как её отослать или перенести в дерево портов. portlint
предупреждает вас о многих распространённых ошибках, как функциональных, так и стилистических. Для нового (или скопированного внутри хранилища) порта самым подходящим является запуск portlint -A
; для уже существующего порта достаточно будет запустить portlint -C
.
Так как для обнаружения ошибок portlint
использует эвристические методы, то им могут выдаваться и ошибочные предупреждения. Кроме того, время от времени нечто, отмечаемое как некорректность, из-за ограничений механизма создания портов не может быть сделано никак иначе. Если вы сомневаетесь, то лучше всего спросить в Список рассылки, посвящённый Портам FreeBSD.
9.3. Port Tools
Программа ports-mgmt/porttools входит в состав Коллекции Портов.
port
является сценарием переднего плана, который может упростить вам задачу тестирования. Если вы хотите проверить новый порт или обновить существующий, то вы можете использовать port test
для проверки вашего порта, включая проверку portlint
. Эта команда также находит и отображает любые файлы, которые невключенные в pkg-plist. Смотрите следующий пример:
9.4. PREFIX
и DESTDIR
Переменная PREFIX
определяет, куда будет установлен порт. По умолчанию это /usr/local, но может меняться пользователем на собственный путь, такой как /opt. В вашем порту значение этой переменной должно учитываться.
Если пользователь установил переменную DESTDIR
, то она определяет полное альтернативное окружение, обычно, это jail или установленная система, смонтированная в месте, отличном от /. На самом деле порт устанавливается в DESTDIR/PREFIX и регистрируется в базе данных пакетов в DESTDIR/var/db/pkg. Поскольку управление DESTDIR
производится автоматически инфраструктурой портов с помощью chroot(8), вам не нужны никакие изменения или проявление особой осторожности при написании портов, совместымых с DESTDIR
.
Значение переменной PREFIX
будет установлено в LOCALBASE
(по умолчанию /usr/local). Если задана переменная USE_LINUX_PREFIX
, то PREFIX
примет значение LINUXBASE
(по умолчанию /compat/linux).
Избегание явно прописываемых путей /usr/local в исходном коде сделает порт гораздо более гибким и способным удовлетворить потребности других серверов. Часто этого можно добиться простой заменой строк /usr/local в различных файлах Makefile внутри порта на ${PREFIX}
. Эта переменная автоматически передаётся далее на каждом этапе построения и установки.
Проверьте, что ваше приложение не устанавливает чего-либо в каталог /usr/local вместо PREFIX
. Наличие явно указанных путей можно быстро проверить следующим образом:
# make clean; make package PREFIX=/var/tmp/`make -V PORTNAME`
Если что-то было установлено за пределами PREFIX
, то процесс создания пакета сообщит об отсутствии файлов.
Это также стоит проверить с использованием поддержки каталога сборки (смотрите Staging):
# make stage && make check-orphans && make package
Эти проверки не найдут явно указанных путей внутри файлов порта и не проверят корректность использования LOCALBASE
в качестве ссылки на файлы из других портов. Порт, временно установленный в /var/tmp/make -V PORTNAME
, следует проверять на работоспособность, чтобы убедиться в отсутствии проблем с путями.
Переменная PREFIX
не должна задаваться явно в файле Makefile порта. Пользователи при установке порта могут задать в PREFIX
свое собственное место, и порт должен учитывать это значение.
Обратитесь к программам/файлам из других портов с переменными, перечисленными выше, без указания явных маршрутов. Например, если ваш порт требует, чтобы макрос PAGER
являлся полным путем утилиты less
, не используйте строковый путь /usr/local/bin/less. Вместо этого используйте ${LOCALBASE}
:
-DPAGER=\"${LOCALBASE}/bin/less\"
Путь с использованием LOCALBASE
имеет больше шансов оставаться работоспособным, если системный администратор переместил всё дерево /usr/local куда-то в другое место.
9.5. Tinderbox
Если вы алчный контрибутор портов, то вы можете захотеть взглянуть на Tinderbox. Это мощная система построения и тестирования портов. Tinderbox можно установить, используя порт ports-mgmt/tinderbox. Обязательно прочитайте поставляемую документацию, поскольку конфигурация не является тривиальной.
Для получения подробностей посетите вебсайт Tinderbox.
9.6. Poudriere
Если вы контрибутор портов, подумайте об установке poudriere. Это мощная система для построения и тестирования портов. Poudriere можно установить из ports-mgmt/poudriere.
Для получения подробной информации посетите вебсайт Poudriere.
Изменено: 9 марта 2024 г. by Danilo G. Baio