Глава 6. Особые соглашения

Содержание
6.1. Staging
6.2. Динамические библиотеки
6.3. Порты с ограничениями на распространение или с правовым обременением
6.4. Механизмы построения
6.5. Использование GNU Autotools
6.6. Использование GNU gettext
6.7. Использование Perl
6.8. Использование X11
6.9. Использование GNOME
6.10. Использование Qt
6.11. Использование KDE
6.12. Использование Java
6.13. Веб-приложения, Apache и PHP
6.14. Использование Python
6.15. Использование Tcl/Tk
6.16. Использование Emacs
6.17. Использование Ruby
6.18. Использование SDL
6.19. Использование wxWidgets
6.20. Использование Lua
6.21. Использование iconv
6.22. Использование Xfce
6.23. Использование Mozilla
6.24. Использование баз данных
6.25. Запуск и остановка служб (сценарии rc)
6.26. Добавление пользователей и групп
6.27. Порты, требующие наличия исходных текстов ядра

Имеется ещё несколько вещей, которые вы должны иметь в виду при создании порта. Этот раздел описывает наиболее часто встречающиеся из них.

6.1. Staging

bsd.port.mk ожидает от портов работу с <<каталогом сборки>>. Это означает, что порт должен устанавливать файлы не напрямую в назначенные каталоги (то есть, например, под PREFIX), а в отдельный каталог, из которого затем собирается пакет. Во многих случаях привилегии root для этого не требуются, что делает возможным сборку пакетов из-под непривилегированного пользователя. В режиме staging порт собирается и устанавливается в каталог сборки STAGEDIR. Пакет создается из каталога сборки и затем устанавливается в систему. В инструментарии automake такая концепция именуется DESTDIR; в прочем, в FreeBSD DESTDIR имеет собственное значение (смотрите Раздел 9.4, <<PREFIX и DESTDIR>>).

Если для порта всё ещё требуются системные привилегии при выполнении цели package, то в Makefile должна быть добавлена следующая строка:

NEED_ROOT=	yes

Метапорты, то есть порты, которые не устанавливают файлы непосредственно, а только зависят от других портов, должны по возможности избегать распаковки mtree(8) в каталог сборки. Это основная иерархия каталогов пакета, и эти пустые каталоги будут выглядеть лишними. Для предотвращения распаковки mtree(8) добавьте эту строку:

NO_MTREE=	yes

Staging задействуется посредством добавления переменной STAGEDIR слева от путей, которые используются в целях pre-install, do-install и post-install (смотрите примеры в книге). Обычно сюда относятся PREFIX, ETCDIR, DATADIR, EXAMPLESDIR, MANPREFIX, DOCSDIR и так далее. Каталоги должны создаваться при выполнении цели post-install. Избегайте использования абсолютных путей, когда это возможно.

При создании символический ссылки STAGEDIR должен ставиться только для пути назначения. Например:

${LN} -sf libfoo.so.42 ${STAGEDIR}${PREFIX}/lib/libfoo.so

Первоначальный путь ${PREFIX}/lib/libfoo.so.42 выглядит нормально, но по факту может быть неправильным. Абсолютные пути могут указывать на неподходящее место, например, когда удалённая файловая система смонтирована по NFS как непривилегированная точка монтирования. Относительные пути реже подвержены проблемам и часто намного короче.

Порты, устанавливающие модули ядра, должны предварять путь установки (по умолчанию /boot/modules) переменной STAGEDIR.

Этот, и другие документы, могут быть скачаны с http://ftp.FreeBSD.org/pub/FreeBSD/doc/.

По вопросам, связанным с FreeBSD, прочитайте документацию прежде чем писать в <questions@FreeBSD.org>.

По вопросам, связанным с этой документацией, пишите в рассылку <doc@FreeBSD.org>.