Быстрое портированиеВ этом разделе описано, как создать новый порт на скорую
руку. Во многих случаях этого бывает не достаточно, так что вам
нужно будет прочитать документ дальше.Во-первых, скачайте оригинальный tar-файл и поместите его в
каталог DISTDIR, который по умолчанию есть не
что иное, как /usr/ports/distfiles.Здесь предполагается, что программное обеспечение
компилируется без проблем как есть, то есть для работы
приложения на вашей системе &os; не потребовалось абсолютно
никаких изменений. Если требовалось что-то изменить, то вам
придется обратиться также и к следующему разделу.Перед началом портирования рекомендуется установить
переменную &man.make.1; DEVELOPER в
/etc/make.conf.&prompt.root; echo DEVELOPER=yes >> /etc/make.confЭта настройка включает режим разработчика, в
котором отображаются предупреждения при использовании
устаревших конструкций и задействуются некоторые дополнительные
проверки при вызове команды make.Создание файла MakefileМинимальный Makefile будет выглядеть
примерно так:# $FreeBSD$
PORTNAME= oneko
PORTVERSION= 1.1b
CATEGORIES= games
MASTER_SITES= ftp://ftp.cs.columbia.edu/archives/X11R5/contrib/
MAINTAINER= youremail@example.com
COMMENT= Cat chasing a mouse all over the screen
.include <bsd.port.mk>В некоторых случаях в заголовке
Makefile существующего порта могут
содержаться дополнительные строки, такие как название порта и
дата его создания. Эта дополнительная информация была
объявлена устаревшей и находится в процессе удаления.Посмотрим, сможете ли вы его понять. Не обращайте внимание
на содержимое строчки
$FreeBSD$, она будет заполнена
автоматически системой Subversion,
когда порт будет импортирован в наше дерево портов. Вы можете
найти более подробный пример в разделе пример Makefile.Создание информационных файловИмеется два информационных файла, которые требуются для
любого порта, вне зависимости от того, является ли он пакетом
или нет. Это pkg-descr и
pkg-plist. Префикс
pkg- отличает их от других файлов.pkg-descrЭто более подробное краткое описание порта. От одного до
нескольких абзацев, кратко описывающих, что представляет
собой порт, будет достаточно.Это не руководство и не
подробнейшее описание того, как использовать или
компилировать порт! Пожалуйста, будьте
внимательны при копировании текста из
README или страниц справочника
; слишком часто они не являются кратким
описанием порта или имеют неудобный формат (например,
страницы справочника выровнены пробелами, что особенно
плохо смотрится с моноширинными шрифтами).Хорошо составленный pkg-descr
описывает порт достаточно полно, чтобы пользователю не
приходилось сверяться с документацией или посещать вебсайт
для понимания того, что делает данное программное
обеспечение, чем оно может быть полезно или какие хорошие
функции у него имеются. Упоминание про определённые
требования, такие как используемый графический
инструментарий, тяжёлые зависимости, окружение для запуска
или используемый язык программирования помогут пользователям
определиться, будет ли этот порт для них работать.Включите сюда URL официальной домашней страницы Интернет.
Перед одним из сайтов (выберите
основной) добавьте WWW: (с последующим
единичным пробелом) для того, чтобы вспомогательные утилиты
работали правильно. Если URI является корнем сайта или
каталогом, то значение должно быть дополнено косой
чертой.Если указанная для порта веб-страница не доступна,
попытайтесь сперва поискать, был ли официальный сайт
перемещён, переименован или размещён в другом месте.Следующий пример показывает, как должен выглядеть ваш
pkg-descr:This is a port of oneko, in which a cat chases a poor mouse all over
the screen.
:
(etc.)
WWW: http://www.oneko.org/pkg-plistЗдесь перечисляются все файлы, устанавливаемые портом.
Его также называют списком для упаковки,
потому что пакет генерируется упаковкой файлов, которые здесь
указаны. Имена путей указываются относительно установочного
префикса (обычно /usr/local). Если порт
во время установки создает каталоги, убедитесь, что добавлены
строки @dirrm для удаления каталогов при
удалении пакета.Вот маленький пример:bin/oneko
man/man1/oneko.1.gz
lib/X11/app-defaults/Oneko
lib/X11/oneko/cat1.xpm
lib/X11/oneko/cat2.xpm
lib/X11/oneko/mouse.xpm
@dirrm lib/X11/onekoОбратитесь к странице справочной системы по команде
&man.pkg-create.8; с подробным описанием формата списка
упаковки.Рекомендуется, чтобы имена файлов в этом списке были
отсортированы в алфавитном порядке. Это позволит
значительно облегчить сверку изменений при обновлении
порта.Создание списка упаковки вручную может оказаться весьма
трудоёмкой задачей. Если порт устанавливает большое
количество файлов, раздел об автоматическом построении
списка упаковки может помочь сэкономить
время.Существует только одно исключение, когда у порта может
отсутствовать pkg-plist. Если порт
устанавливает лишь несколько файлов, а возможно, и каталогов,
то они могут быть перечислены в переменных
PLIST_FILES и
PLIST_DIRS, соответственно, внутри файла
Makefile порта. К примеру, мы можем
обойтись без файла pkg-plist у
приведённого выше порта oneko, добавив
следующие строки в Makefile:PLIST_FILES= bin/oneko \
man/man1/oneko.1.gz \
lib/X11/app-defaults/Oneko \
lib/X11/oneko/cat1.xpm \
lib/X11/oneko/cat2.xpm \
lib/X11/oneko/mouse.xpm
PLIST_DIRS= lib/X11/onekoКонечно, переменная PLIST_DIRS не
должна задаваться, если порт не устанавливает никаких
каталогов.Несколько портов могут совместно использовать общий
каталог. В этом случае PLIST_DIRS
следует заменить на PLIST_DIRSTRY, так
чтобы каталог удалялся только если он пуст, а иначе
игнорировался. Использование PLIST_DIRS
и PLIST_DIRSTRY аналогично
@dirrm и @dirrmtry в
pkg-plist, описание которых входит в
.Обратной стороной такого способа перечисления файлов и
каталогов порта является невозможность использования
последовательностей команд, описанных в &man.pkg-create.8;.
Поэтому он подходит для простых портов, что делает их ещё
более простыми. Одновременно с этим положительным моментом
является уменьшение количества файлов в коллекции портов.
Пожалуйста, подумайте над использованием этой техники, прежде
чем создавать pkg-plist.Далее мы увидим, как можно использовать файлы
pkg-plist и
PLIST_FILES выполнения более сложных задач.Создание файла с контрольной суммойПросто введите команду make makesum.
Правила утилиты make автоматически сгенерируют файл
distinfo.Если у извлекаемого файла регулярно меняется контрольная
сумма и вы не сомневаетесь в надежности источника (т.е. он
получен из CD производителя, либо ежедневно обновляется
документация), то вы должны указать эти файлы в переменной
IGNOREFILES. Тогда контрольная сумма при
выполнении make makesum для этого файла
создаваться не будет, а вместо этого для него будет установлено
значение IGNORE.Тестирование портаВы должны удостовериться, что правила построения порта
выполняют именно то, что вы хотите, включая создание пакета для
порта. Вот те важные вещи, которые вы должны проверить.pkg-plist не содержит ничего сверх
того, что устанавливается портомpkg-plist содержит абсолютно все,
что устанавливается портомПорт может быть установлен с помощью указания цели
install. Это позволяет
убедиться в правильной работе сценария установки.Порт может быть правильным образом удалён с помощью
указания цели deinstall. Это
позволяет убедиться в правильной работе сценария
удаления.Следует убедиться, что make package
можно запустить из-под обычного пользователя (то есть, не
из-под root).
Если это не так, в Makefile порта
должно быть добавлено
NEED_ROOT=yes.Рекомендуемый порядок проверкиmake stagemake check-orphansmake packagemake installmake deinstallpkg add package-filenamemake package (из-под
пользователя)Убедитесь, что на любом из этапов не выдается никаких
предупреждений.Основательное автоматизированное тестирование может быть
выполнено при помощи ports-mgmt/tinderbox или ports-mgmt/poudriere из Коллекции
Портов. Эти приложения используют jails,
в которых проверяются все перечисленные выше этапы без
изменения состояния основной системы.Проверка вашего порта утилитой
portlintБудьте добры, пользуйтесь утилитой
portlint для проверки того, что ваш порт
соответствует нашим рекомендациям. Программа ports-mgmt/portlint является частью
Коллекции Портов. В частности, вы можете захотеть проверить,
правильно ли сформирован файл Makefile и соответствующим
ли образом именован пакет.Посылка нового портаПеред посылкой нового порта прочитайте раздел о том, что
можно и нельзя
делать.Когда вы наконец довольны своим первым портом,
единственное, что осталось сделать, это включить его в основное
дерево портов &os; и осчастливить этим всех остальных. Нам не
нужен ни каталог work, ни пакет
pkgname.tgz, так что удалите их прямо
сейчас.Затем получите файл &man.shar.1;. Предполагая, что порт
называется oneko, перейдите в каталог выше, где находится
каталог oneko, и наберите:
shar `find oneko` > oneko.sharВключите oneko.shar в сообщение об
ошибке и пошлите его с помощью &man.send-pr.1;. Обратитесь к
разделу Сообщения
об ошибках и общие замечания для получения подробной
информации о &man.send-pr.1;).Укажите в сообщении категорию ports и
класс change-request.
Не указывайте, что сообщение имеет статус
confidential! Добавьте краткое описание
программы в поле Description отправляемого PR
(например, содержимое COMMENT в сокращённом
варианте) и сам файл в виде архива .shar в
поле Fix.Хорошее описание в заголовке сообщения о проблеме
значительно облегчает работу коммиттеров портов. Для новых
портов мы предпочитаем нечто вроде New port:
<категория>/<название порта> <краткое
описание порта>. Следование этой схеме упрощает
и ускоряет начало работы по добавлению нового порта.Повторим ещё раз, что не нужно включать ни
оригинальный файл с дистрибутивом, ни каталог
work, ни пакет, построенный вами
командой make package; для
новых портов используйте &man.shar.1;, но не
&man.diff.1;.После отправки порта, пожалуйста, потерпите. Время,
необходимое для включения нового порта во &os;, может занимать
от нескольких дней до нескольких месяцев.
Здесь можно увидеть список ожидающих PR для
портов.После рассмотрения нового порта мы при необходимости вам
ответим, а затем включим порт в наше дерево. Ваше имя также
будет добавлено в список
Дополнительных контрибуторов проекта &os; и другие
файлы.